xref: /linux/drivers/char/ipmi/ipmi_msghandler.c (revision 2624f124b3b5d550ab2fbef7ee3bc0e1fed09722)
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/config.h>
35 #include <linux/module.h>
36 #include <linux/errno.h>
37 #include <asm/system.h>
38 #include <linux/sched.h>
39 #include <linux/poll.h>
40 #include <linux/spinlock.h>
41 #include <linux/rwsem.h>
42 #include <linux/slab.h>
43 #include <linux/ipmi.h>
44 #include <linux/ipmi_smi.h>
45 #include <linux/notifier.h>
46 #include <linux/init.h>
47 #include <linux/proc_fs.h>
48 
49 #define PFX "IPMI message handler: "
50 
51 #define IPMI_DRIVER_VERSION "36.0"
52 
53 static struct ipmi_recv_msg *ipmi_alloc_recv_msg(void);
54 static int ipmi_init_msghandler(void);
55 
56 static int initialized = 0;
57 
58 #ifdef CONFIG_PROC_FS
59 struct proc_dir_entry *proc_ipmi_root = NULL;
60 #endif /* CONFIG_PROC_FS */
61 
62 #define MAX_EVENTS_IN_QUEUE	25
63 
64 /* Don't let a message sit in a queue forever, always time it with at lest
65    the max message timer.  This is in milliseconds. */
66 #define MAX_MSG_TIMEOUT		60000
67 
68 struct ipmi_user
69 {
70 	struct list_head link;
71 
72 	/* The upper layer that handles receive messages. */
73 	struct ipmi_user_hndl *handler;
74 	void             *handler_data;
75 
76 	/* The interface this user is bound to. */
77 	ipmi_smi_t intf;
78 
79 	/* Does this interface receive IPMI events? */
80 	int gets_events;
81 };
82 
83 struct cmd_rcvr
84 {
85 	struct list_head link;
86 
87 	ipmi_user_t   user;
88 	unsigned char netfn;
89 	unsigned char cmd;
90 };
91 
92 struct seq_table
93 {
94 	unsigned int         inuse : 1;
95 	unsigned int         broadcast : 1;
96 
97 	unsigned long        timeout;
98 	unsigned long        orig_timeout;
99 	unsigned int         retries_left;
100 
101 	/* To verify on an incoming send message response that this is
102            the message that the response is for, we keep a sequence id
103            and increment it every time we send a message. */
104 	long                 seqid;
105 
106 	/* This is held so we can properly respond to the message on a
107            timeout, and it is used to hold the temporary data for
108            retransmission, too. */
109 	struct ipmi_recv_msg *recv_msg;
110 };
111 
112 /* Store the information in a msgid (long) to allow us to find a
113    sequence table entry from the msgid. */
114 #define STORE_SEQ_IN_MSGID(seq, seqid) (((seq&0xff)<<26) | (seqid&0x3ffffff))
115 
116 #define GET_SEQ_FROM_MSGID(msgid, seq, seqid) \
117 	do {								\
118 		seq = ((msgid >> 26) & 0x3f);				\
119 		seqid = (msgid & 0x3fffff);				\
120         } while (0)
121 
122 #define NEXT_SEQID(seqid) (((seqid) + 1) & 0x3fffff)
123 
124 struct ipmi_channel
125 {
126 	unsigned char medium;
127 	unsigned char protocol;
128 
129 	/* My slave address.  This is initialized to IPMI_BMC_SLAVE_ADDR,
130 	   but may be changed by the user. */
131 	unsigned char address;
132 
133 	/* My LUN.  This should generally stay the SMS LUN, but just in
134 	   case... */
135 	unsigned char lun;
136 };
137 
138 #ifdef CONFIG_PROC_FS
139 struct ipmi_proc_entry
140 {
141 	char                   *name;
142 	struct ipmi_proc_entry *next;
143 };
144 #endif
145 
146 #define IPMI_IPMB_NUM_SEQ	64
147 #define IPMI_MAX_CHANNELS       16
148 struct ipmi_smi
149 {
150 	/* What interface number are we? */
151 	int intf_num;
152 
153 	/* The list of upper layers that are using me.  We read-lock
154            this when delivering messages to the upper layer to keep
155            the user from going away while we are processing the
156            message.  This means that you cannot add or delete a user
157            from the receive callback. */
158 	rwlock_t                users_lock;
159 	struct list_head        users;
160 
161 	/* Used for wake ups at startup. */
162 	wait_queue_head_t waitq;
163 
164 	/* The IPMI version of the BMC on the other end. */
165 	unsigned char       version_major;
166 	unsigned char       version_minor;
167 
168 	/* This is the lower-layer's sender routine. */
169 	struct ipmi_smi_handlers *handlers;
170 	void                     *send_info;
171 
172 #ifdef CONFIG_PROC_FS
173 	/* A list of proc entries for this interface.  This does not
174 	   need a lock, only one thread creates it and only one thread
175 	   destroys it. */
176 	spinlock_t             proc_entry_lock;
177 	struct ipmi_proc_entry *proc_entries;
178 #endif
179 
180 	/* A table of sequence numbers for this interface.  We use the
181            sequence numbers for IPMB messages that go out of the
182            interface to match them up with their responses.  A routine
183            is called periodically to time the items in this list. */
184 	spinlock_t       seq_lock;
185 	struct seq_table seq_table[IPMI_IPMB_NUM_SEQ];
186 	int curr_seq;
187 
188 	/* Messages that were delayed for some reason (out of memory,
189            for instance), will go in here to be processed later in a
190            periodic timer interrupt. */
191 	spinlock_t       waiting_msgs_lock;
192 	struct list_head waiting_msgs;
193 
194 	/* The list of command receivers that are registered for commands
195 	   on this interface. */
196 	rwlock_t	 cmd_rcvr_lock;
197 	struct list_head cmd_rcvrs;
198 
199 	/* Events that were queues because no one was there to receive
200            them. */
201 	spinlock_t       events_lock; /* For dealing with event stuff. */
202 	struct list_head waiting_events;
203 	unsigned int     waiting_events_count; /* How many events in queue? */
204 
205 	/* The event receiver for my BMC, only really used at panic
206 	   shutdown as a place to store this. */
207 	unsigned char event_receiver;
208 	unsigned char event_receiver_lun;
209 	unsigned char local_sel_device;
210 	unsigned char local_event_generator;
211 
212 	/* A cheap hack, if this is non-null and a message to an
213 	   interface comes in with a NULL user, call this routine with
214 	   it.  Note that the message will still be freed by the
215 	   caller.  This only works on the system interface. */
216 	void (*null_user_handler)(ipmi_smi_t intf, struct ipmi_recv_msg *msg);
217 
218 	/* When we are scanning the channels for an SMI, this will
219 	   tell which channel we are scanning. */
220 	int curr_channel;
221 
222 	/* Channel information */
223 	struct ipmi_channel channels[IPMI_MAX_CHANNELS];
224 
225 	/* Proc FS stuff. */
226 	struct proc_dir_entry *proc_dir;
227 	char                  proc_dir_name[10];
228 
229 	spinlock_t   counter_lock; /* For making counters atomic. */
230 
231 	/* Commands we got that were invalid. */
232 	unsigned int sent_invalid_commands;
233 
234 	/* Commands we sent to the MC. */
235 	unsigned int sent_local_commands;
236 	/* Responses from the MC that were delivered to a user. */
237 	unsigned int handled_local_responses;
238 	/* Responses from the MC that were not delivered to a user. */
239 	unsigned int unhandled_local_responses;
240 
241 	/* Commands we sent out to the IPMB bus. */
242 	unsigned int sent_ipmb_commands;
243 	/* Commands sent on the IPMB that had errors on the SEND CMD */
244 	unsigned int sent_ipmb_command_errs;
245 	/* Each retransmit increments this count. */
246 	unsigned int retransmitted_ipmb_commands;
247 	/* When a message times out (runs out of retransmits) this is
248            incremented. */
249 	unsigned int timed_out_ipmb_commands;
250 
251 	/* This is like above, but for broadcasts.  Broadcasts are
252            *not* included in the above count (they are expected to
253            time out). */
254 	unsigned int timed_out_ipmb_broadcasts;
255 
256 	/* Responses I have sent to the IPMB bus. */
257 	unsigned int sent_ipmb_responses;
258 
259 	/* The response was delivered to the user. */
260 	unsigned int handled_ipmb_responses;
261 	/* The response had invalid data in it. */
262 	unsigned int invalid_ipmb_responses;
263 	/* The response didn't have anyone waiting for it. */
264 	unsigned int unhandled_ipmb_responses;
265 
266 	/* Commands we sent out to the IPMB bus. */
267 	unsigned int sent_lan_commands;
268 	/* Commands sent on the IPMB that had errors on the SEND CMD */
269 	unsigned int sent_lan_command_errs;
270 	/* Each retransmit increments this count. */
271 	unsigned int retransmitted_lan_commands;
272 	/* When a message times out (runs out of retransmits) this is
273            incremented. */
274 	unsigned int timed_out_lan_commands;
275 
276 	/* Responses I have sent to the IPMB bus. */
277 	unsigned int sent_lan_responses;
278 
279 	/* The response was delivered to the user. */
280 	unsigned int handled_lan_responses;
281 	/* The response had invalid data in it. */
282 	unsigned int invalid_lan_responses;
283 	/* The response didn't have anyone waiting for it. */
284 	unsigned int unhandled_lan_responses;
285 
286 	/* The command was delivered to the user. */
287 	unsigned int handled_commands;
288 	/* The command had invalid data in it. */
289 	unsigned int invalid_commands;
290 	/* The command didn't have anyone waiting for it. */
291 	unsigned int unhandled_commands;
292 
293 	/* Invalid data in an event. */
294 	unsigned int invalid_events;
295 	/* Events that were received with the proper format. */
296 	unsigned int events;
297 };
298 
299 #define MAX_IPMI_INTERFACES 4
300 static ipmi_smi_t ipmi_interfaces[MAX_IPMI_INTERFACES];
301 
302 /* Used to keep interfaces from going away while operations are
303    operating on interfaces.  Grab read if you are not modifying the
304    interfaces, write if you are. */
305 static DECLARE_RWSEM(interfaces_sem);
306 
307 /* Directly protects the ipmi_interfaces data structure.  This is
308    claimed in the timer interrupt. */
309 static DEFINE_SPINLOCK(interfaces_lock);
310 
311 /* List of watchers that want to know when smi's are added and
312    deleted. */
313 static struct list_head smi_watchers = LIST_HEAD_INIT(smi_watchers);
314 static DECLARE_RWSEM(smi_watchers_sem);
315 
316 int ipmi_smi_watcher_register(struct ipmi_smi_watcher *watcher)
317 {
318 	int i;
319 
320 	down_read(&interfaces_sem);
321 	down_write(&smi_watchers_sem);
322 	list_add(&(watcher->link), &smi_watchers);
323 	for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
324 		if (ipmi_interfaces[i] != NULL) {
325 			watcher->new_smi(i);
326 		}
327 	}
328 	up_write(&smi_watchers_sem);
329 	up_read(&interfaces_sem);
330 	return 0;
331 }
332 
333 int ipmi_smi_watcher_unregister(struct ipmi_smi_watcher *watcher)
334 {
335 	down_write(&smi_watchers_sem);
336 	list_del(&(watcher->link));
337 	up_write(&smi_watchers_sem);
338 	return 0;
339 }
340 
341 static void
342 call_smi_watchers(int i)
343 {
344 	struct ipmi_smi_watcher *w;
345 
346 	down_read(&smi_watchers_sem);
347 	list_for_each_entry(w, &smi_watchers, link) {
348 		if (try_module_get(w->owner)) {
349 			w->new_smi(i);
350 			module_put(w->owner);
351 		}
352 	}
353 	up_read(&smi_watchers_sem);
354 }
355 
356 static int
357 ipmi_addr_equal(struct ipmi_addr *addr1, struct ipmi_addr *addr2)
358 {
359 	if (addr1->addr_type != addr2->addr_type)
360 		return 0;
361 
362 	if (addr1->channel != addr2->channel)
363 		return 0;
364 
365 	if (addr1->addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE) {
366 		struct ipmi_system_interface_addr *smi_addr1
367 		    = (struct ipmi_system_interface_addr *) addr1;
368 		struct ipmi_system_interface_addr *smi_addr2
369 		    = (struct ipmi_system_interface_addr *) addr2;
370 		return (smi_addr1->lun == smi_addr2->lun);
371 	}
372 
373 	if ((addr1->addr_type == IPMI_IPMB_ADDR_TYPE)
374 	    || (addr1->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE))
375 	{
376 		struct ipmi_ipmb_addr *ipmb_addr1
377 		    = (struct ipmi_ipmb_addr *) addr1;
378 		struct ipmi_ipmb_addr *ipmb_addr2
379 		    = (struct ipmi_ipmb_addr *) addr2;
380 
381 		return ((ipmb_addr1->slave_addr == ipmb_addr2->slave_addr)
382 			&& (ipmb_addr1->lun == ipmb_addr2->lun));
383 	}
384 
385 	if (addr1->addr_type == IPMI_LAN_ADDR_TYPE) {
386 		struct ipmi_lan_addr *lan_addr1
387 			= (struct ipmi_lan_addr *) addr1;
388 		struct ipmi_lan_addr *lan_addr2
389 		    = (struct ipmi_lan_addr *) addr2;
390 
391 		return ((lan_addr1->remote_SWID == lan_addr2->remote_SWID)
392 			&& (lan_addr1->local_SWID == lan_addr2->local_SWID)
393 			&& (lan_addr1->session_handle
394 			    == lan_addr2->session_handle)
395 			&& (lan_addr1->lun == lan_addr2->lun));
396 	}
397 
398 	return 1;
399 }
400 
401 int ipmi_validate_addr(struct ipmi_addr *addr, int len)
402 {
403 	if (len < sizeof(struct ipmi_system_interface_addr)) {
404 		return -EINVAL;
405 	}
406 
407 	if (addr->addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE) {
408 		if (addr->channel != IPMI_BMC_CHANNEL)
409 			return -EINVAL;
410 		return 0;
411 	}
412 
413 	if ((addr->channel == IPMI_BMC_CHANNEL)
414 	    || (addr->channel >= IPMI_NUM_CHANNELS)
415 	    || (addr->channel < 0))
416 		return -EINVAL;
417 
418 	if ((addr->addr_type == IPMI_IPMB_ADDR_TYPE)
419 	    || (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE))
420 	{
421 		if (len < sizeof(struct ipmi_ipmb_addr)) {
422 			return -EINVAL;
423 		}
424 		return 0;
425 	}
426 
427 	if (addr->addr_type == IPMI_LAN_ADDR_TYPE) {
428 		if (len < sizeof(struct ipmi_lan_addr)) {
429 			return -EINVAL;
430 		}
431 		return 0;
432 	}
433 
434 	return -EINVAL;
435 }
436 
437 unsigned int ipmi_addr_length(int addr_type)
438 {
439 	if (addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
440 		return sizeof(struct ipmi_system_interface_addr);
441 
442 	if ((addr_type == IPMI_IPMB_ADDR_TYPE)
443 	    || (addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE))
444 	{
445 		return sizeof(struct ipmi_ipmb_addr);
446 	}
447 
448 	if (addr_type == IPMI_LAN_ADDR_TYPE)
449 		return sizeof(struct ipmi_lan_addr);
450 
451 	return 0;
452 }
453 
454 static void deliver_response(struct ipmi_recv_msg *msg)
455 {
456 	if (! msg->user) {
457 		ipmi_smi_t    intf = msg->user_msg_data;
458 		unsigned long flags;
459 
460 		/* Special handling for NULL users. */
461 		if (intf->null_user_handler) {
462 			intf->null_user_handler(intf, msg);
463 			spin_lock_irqsave(&intf->counter_lock, flags);
464 			intf->handled_local_responses++;
465 			spin_unlock_irqrestore(&intf->counter_lock, flags);
466 		} else {
467 			/* No handler, so give up. */
468 			spin_lock_irqsave(&intf->counter_lock, flags);
469 			intf->unhandled_local_responses++;
470 			spin_unlock_irqrestore(&intf->counter_lock, flags);
471 		}
472 		ipmi_free_recv_msg(msg);
473 	} else {
474 		msg->user->handler->ipmi_recv_hndl(msg,
475 						   msg->user->handler_data);
476 	}
477 }
478 
479 /* Find the next sequence number not being used and add the given
480    message with the given timeout to the sequence table.  This must be
481    called with the interface's seq_lock held. */
482 static int intf_next_seq(ipmi_smi_t           intf,
483 			 struct ipmi_recv_msg *recv_msg,
484 			 unsigned long        timeout,
485 			 int                  retries,
486 			 int                  broadcast,
487 			 unsigned char        *seq,
488 			 long                 *seqid)
489 {
490 	int          rv = 0;
491 	unsigned int i;
492 
493 	for (i = intf->curr_seq;
494 	     (i+1)%IPMI_IPMB_NUM_SEQ != intf->curr_seq;
495 	     i = (i+1)%IPMI_IPMB_NUM_SEQ)
496 	{
497 		if (! intf->seq_table[i].inuse)
498 			break;
499 	}
500 
501 	if (! intf->seq_table[i].inuse) {
502 		intf->seq_table[i].recv_msg = recv_msg;
503 
504 		/* Start with the maximum timeout, when the send response
505 		   comes in we will start the real timer. */
506 		intf->seq_table[i].timeout = MAX_MSG_TIMEOUT;
507 		intf->seq_table[i].orig_timeout = timeout;
508 		intf->seq_table[i].retries_left = retries;
509 		intf->seq_table[i].broadcast = broadcast;
510 		intf->seq_table[i].inuse = 1;
511 		intf->seq_table[i].seqid = NEXT_SEQID(intf->seq_table[i].seqid);
512 		*seq = i;
513 		*seqid = intf->seq_table[i].seqid;
514 		intf->curr_seq = (i+1)%IPMI_IPMB_NUM_SEQ;
515 	} else {
516 		rv = -EAGAIN;
517 	}
518 
519 	return rv;
520 }
521 
522 /* Return the receive message for the given sequence number and
523    release the sequence number so it can be reused.  Some other data
524    is passed in to be sure the message matches up correctly (to help
525    guard against message coming in after their timeout and the
526    sequence number being reused). */
527 static int intf_find_seq(ipmi_smi_t           intf,
528 			 unsigned char        seq,
529 			 short                channel,
530 			 unsigned char        cmd,
531 			 unsigned char        netfn,
532 			 struct ipmi_addr     *addr,
533 			 struct ipmi_recv_msg **recv_msg)
534 {
535 	int           rv = -ENODEV;
536 	unsigned long flags;
537 
538 	if (seq >= IPMI_IPMB_NUM_SEQ)
539 		return -EINVAL;
540 
541 	spin_lock_irqsave(&(intf->seq_lock), flags);
542 	if (intf->seq_table[seq].inuse) {
543 		struct ipmi_recv_msg *msg = intf->seq_table[seq].recv_msg;
544 
545 		if ((msg->addr.channel == channel)
546 		    && (msg->msg.cmd == cmd)
547 		    && (msg->msg.netfn == netfn)
548 		    && (ipmi_addr_equal(addr, &(msg->addr))))
549 		{
550 			*recv_msg = msg;
551 			intf->seq_table[seq].inuse = 0;
552 			rv = 0;
553 		}
554 	}
555 	spin_unlock_irqrestore(&(intf->seq_lock), flags);
556 
557 	return rv;
558 }
559 
560 
561 /* Start the timer for a specific sequence table entry. */
562 static int intf_start_seq_timer(ipmi_smi_t intf,
563 				long       msgid)
564 {
565 	int           rv = -ENODEV;
566 	unsigned long flags;
567 	unsigned char seq;
568 	unsigned long seqid;
569 
570 
571 	GET_SEQ_FROM_MSGID(msgid, seq, seqid);
572 
573 	spin_lock_irqsave(&(intf->seq_lock), flags);
574 	/* We do this verification because the user can be deleted
575            while a message is outstanding. */
576 	if ((intf->seq_table[seq].inuse)
577 	    && (intf->seq_table[seq].seqid == seqid))
578 	{
579 		struct seq_table *ent = &(intf->seq_table[seq]);
580 		ent->timeout = ent->orig_timeout;
581 		rv = 0;
582 	}
583 	spin_unlock_irqrestore(&(intf->seq_lock), flags);
584 
585 	return rv;
586 }
587 
588 /* Got an error for the send message for a specific sequence number. */
589 static int intf_err_seq(ipmi_smi_t   intf,
590 			long         msgid,
591 			unsigned int err)
592 {
593 	int                  rv = -ENODEV;
594 	unsigned long        flags;
595 	unsigned char        seq;
596 	unsigned long        seqid;
597 	struct ipmi_recv_msg *msg = NULL;
598 
599 
600 	GET_SEQ_FROM_MSGID(msgid, seq, seqid);
601 
602 	spin_lock_irqsave(&(intf->seq_lock), flags);
603 	/* We do this verification because the user can be deleted
604            while a message is outstanding. */
605 	if ((intf->seq_table[seq].inuse)
606 	    && (intf->seq_table[seq].seqid == seqid))
607 	{
608 		struct seq_table *ent = &(intf->seq_table[seq]);
609 
610 		ent->inuse = 0;
611 		msg = ent->recv_msg;
612 		rv = 0;
613 	}
614 	spin_unlock_irqrestore(&(intf->seq_lock), flags);
615 
616 	if (msg) {
617 		msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
618 		msg->msg_data[0] = err;
619 		msg->msg.netfn |= 1; /* Convert to a response. */
620 		msg->msg.data_len = 1;
621 		msg->msg.data = msg->msg_data;
622 		deliver_response(msg);
623 	}
624 
625 	return rv;
626 }
627 
628 
629 int ipmi_create_user(unsigned int          if_num,
630 		     struct ipmi_user_hndl *handler,
631 		     void                  *handler_data,
632 		     ipmi_user_t           *user)
633 {
634 	unsigned long flags;
635 	ipmi_user_t   new_user;
636 	int           rv = 0;
637 	ipmi_smi_t    intf;
638 
639 	/* There is no module usecount here, because it's not
640            required.  Since this can only be used by and called from
641            other modules, they will implicitly use this module, and
642            thus this can't be removed unless the other modules are
643            removed. */
644 
645 	if (handler == NULL)
646 		return -EINVAL;
647 
648 	/* Make sure the driver is actually initialized, this handles
649 	   problems with initialization order. */
650 	if (!initialized) {
651 		rv = ipmi_init_msghandler();
652 		if (rv)
653 			return rv;
654 
655 		/* The init code doesn't return an error if it was turned
656 		   off, but it won't initialize.  Check that. */
657 		if (!initialized)
658 			return -ENODEV;
659 	}
660 
661 	new_user = kmalloc(sizeof(*new_user), GFP_KERNEL);
662 	if (! new_user)
663 		return -ENOMEM;
664 
665 	down_read(&interfaces_sem);
666 	if ((if_num >= MAX_IPMI_INTERFACES) || ipmi_interfaces[if_num] == NULL)
667 	{
668 		rv = -EINVAL;
669 		goto out_unlock;
670 	}
671 
672 	intf = ipmi_interfaces[if_num];
673 
674 	new_user->handler = handler;
675 	new_user->handler_data = handler_data;
676 	new_user->intf = intf;
677 	new_user->gets_events = 0;
678 
679 	if (!try_module_get(intf->handlers->owner)) {
680 		rv = -ENODEV;
681 		goto out_unlock;
682 	}
683 
684 	if (intf->handlers->inc_usecount) {
685 		rv = intf->handlers->inc_usecount(intf->send_info);
686 		if (rv) {
687 			module_put(intf->handlers->owner);
688 			goto out_unlock;
689 		}
690 	}
691 
692 	write_lock_irqsave(&intf->users_lock, flags);
693 	list_add_tail(&new_user->link, &intf->users);
694 	write_unlock_irqrestore(&intf->users_lock, flags);
695 
696  out_unlock:
697 	if (rv) {
698 		kfree(new_user);
699 	} else {
700 		*user = new_user;
701 	}
702 
703 	up_read(&interfaces_sem);
704 	return rv;
705 }
706 
707 static int ipmi_destroy_user_nolock(ipmi_user_t user)
708 {
709 	int              rv = -ENODEV;
710 	ipmi_user_t      t_user;
711 	struct cmd_rcvr  *rcvr, *rcvr2;
712 	int              i;
713 	unsigned long    flags;
714 
715 	/* Find the user and delete them from the list. */
716 	list_for_each_entry(t_user, &(user->intf->users), link) {
717 		if (t_user == user) {
718 			list_del(&t_user->link);
719 			rv = 0;
720 			break;
721 		}
722 	}
723 
724 	if (rv) {
725 		goto out_unlock;
726 	}
727 
728 	/* Remove the user from the interfaces sequence table. */
729 	spin_lock_irqsave(&(user->intf->seq_lock), flags);
730 	for (i = 0; i < IPMI_IPMB_NUM_SEQ; i++) {
731 		if (user->intf->seq_table[i].inuse
732 		    && (user->intf->seq_table[i].recv_msg->user == user))
733 		{
734 			user->intf->seq_table[i].inuse = 0;
735 		}
736 	}
737 	spin_unlock_irqrestore(&(user->intf->seq_lock), flags);
738 
739 	/* Remove the user from the command receiver's table. */
740 	write_lock_irqsave(&(user->intf->cmd_rcvr_lock), flags);
741 	list_for_each_entry_safe(rcvr, rcvr2, &(user->intf->cmd_rcvrs), link) {
742 		if (rcvr->user == user) {
743 			list_del(&rcvr->link);
744 			kfree(rcvr);
745 		}
746 	}
747 	write_unlock_irqrestore(&(user->intf->cmd_rcvr_lock), flags);
748 
749 	kfree(user);
750 
751  out_unlock:
752 
753 	return rv;
754 }
755 
756 int ipmi_destroy_user(ipmi_user_t user)
757 {
758 	int           rv;
759 	ipmi_smi_t    intf = user->intf;
760 	unsigned long flags;
761 
762 	down_read(&interfaces_sem);
763 	write_lock_irqsave(&intf->users_lock, flags);
764 	rv = ipmi_destroy_user_nolock(user);
765 	if (!rv) {
766 		module_put(intf->handlers->owner);
767 		if (intf->handlers->dec_usecount)
768 			intf->handlers->dec_usecount(intf->send_info);
769 	}
770 
771 	write_unlock_irqrestore(&intf->users_lock, flags);
772 	up_read(&interfaces_sem);
773 	return rv;
774 }
775 
776 void ipmi_get_version(ipmi_user_t   user,
777 		      unsigned char *major,
778 		      unsigned char *minor)
779 {
780 	*major = user->intf->version_major;
781 	*minor = user->intf->version_minor;
782 }
783 
784 int ipmi_set_my_address(ipmi_user_t   user,
785 			unsigned int  channel,
786 			unsigned char address)
787 {
788 	if (channel >= IPMI_MAX_CHANNELS)
789 		return -EINVAL;
790 	user->intf->channels[channel].address = address;
791 	return 0;
792 }
793 
794 int ipmi_get_my_address(ipmi_user_t   user,
795 			unsigned int  channel,
796 			unsigned char *address)
797 {
798 	if (channel >= IPMI_MAX_CHANNELS)
799 		return -EINVAL;
800 	*address = user->intf->channels[channel].address;
801 	return 0;
802 }
803 
804 int ipmi_set_my_LUN(ipmi_user_t   user,
805 		    unsigned int  channel,
806 		    unsigned char LUN)
807 {
808 	if (channel >= IPMI_MAX_CHANNELS)
809 		return -EINVAL;
810 	user->intf->channels[channel].lun = LUN & 0x3;
811 	return 0;
812 }
813 
814 int ipmi_get_my_LUN(ipmi_user_t   user,
815 		    unsigned int  channel,
816 		    unsigned char *address)
817 {
818 	if (channel >= IPMI_MAX_CHANNELS)
819 		return -EINVAL;
820 	*address = user->intf->channels[channel].lun;
821 	return 0;
822 }
823 
824 int ipmi_set_gets_events(ipmi_user_t user, int val)
825 {
826 	unsigned long         flags;
827 	struct ipmi_recv_msg  *msg, *msg2;
828 
829 	read_lock(&(user->intf->users_lock));
830 	spin_lock_irqsave(&(user->intf->events_lock), flags);
831 	user->gets_events = val;
832 
833 	if (val) {
834 		/* Deliver any queued events. */
835 		list_for_each_entry_safe(msg, msg2, &(user->intf->waiting_events), link) {
836 			list_del(&msg->link);
837 			msg->user = user;
838 			deliver_response(msg);
839 		}
840 	}
841 
842 	spin_unlock_irqrestore(&(user->intf->events_lock), flags);
843 	read_unlock(&(user->intf->users_lock));
844 
845 	return 0;
846 }
847 
848 int ipmi_register_for_cmd(ipmi_user_t   user,
849 			  unsigned char netfn,
850 			  unsigned char cmd)
851 {
852 	struct cmd_rcvr  *cmp;
853 	unsigned long    flags;
854 	struct cmd_rcvr  *rcvr;
855 	int              rv = 0;
856 
857 
858 	rcvr = kmalloc(sizeof(*rcvr), GFP_KERNEL);
859 	if (! rcvr)
860 		return -ENOMEM;
861 
862 	read_lock(&(user->intf->users_lock));
863 	write_lock_irqsave(&(user->intf->cmd_rcvr_lock), flags);
864 	/* Make sure the command/netfn is not already registered. */
865 	list_for_each_entry(cmp, &(user->intf->cmd_rcvrs), link) {
866 		if ((cmp->netfn == netfn) && (cmp->cmd == cmd)) {
867 			rv = -EBUSY;
868 			break;
869 		}
870 	}
871 
872 	if (! rv) {
873 		rcvr->cmd = cmd;
874 		rcvr->netfn = netfn;
875 		rcvr->user = user;
876 		list_add_tail(&(rcvr->link), &(user->intf->cmd_rcvrs));
877 	}
878 
879 	write_unlock_irqrestore(&(user->intf->cmd_rcvr_lock), flags);
880 	read_unlock(&(user->intf->users_lock));
881 
882 	if (rv)
883 		kfree(rcvr);
884 
885 	return rv;
886 }
887 
888 int ipmi_unregister_for_cmd(ipmi_user_t   user,
889 			    unsigned char netfn,
890 			    unsigned char cmd)
891 {
892 	unsigned long    flags;
893 	struct cmd_rcvr  *rcvr;
894 	int              rv = -ENOENT;
895 
896 	read_lock(&(user->intf->users_lock));
897 	write_lock_irqsave(&(user->intf->cmd_rcvr_lock), flags);
898 	/* Make sure the command/netfn is not already registered. */
899 	list_for_each_entry(rcvr, &(user->intf->cmd_rcvrs), link) {
900 		if ((rcvr->netfn == netfn) && (rcvr->cmd == cmd)) {
901 			rv = 0;
902 			list_del(&rcvr->link);
903 			kfree(rcvr);
904 			break;
905 		}
906 	}
907 	write_unlock_irqrestore(&(user->intf->cmd_rcvr_lock), flags);
908 	read_unlock(&(user->intf->users_lock));
909 
910 	return rv;
911 }
912 
913 void ipmi_user_set_run_to_completion(ipmi_user_t user, int val)
914 {
915 	user->intf->handlers->set_run_to_completion(user->intf->send_info,
916 						    val);
917 }
918 
919 static unsigned char
920 ipmb_checksum(unsigned char *data, int size)
921 {
922 	unsigned char csum = 0;
923 
924 	for (; size > 0; size--, data++)
925 		csum += *data;
926 
927 	return -csum;
928 }
929 
930 static inline void format_ipmb_msg(struct ipmi_smi_msg   *smi_msg,
931 				   struct kernel_ipmi_msg *msg,
932 				   struct ipmi_ipmb_addr *ipmb_addr,
933 				   long                  msgid,
934 				   unsigned char         ipmb_seq,
935 				   int                   broadcast,
936 				   unsigned char         source_address,
937 				   unsigned char         source_lun)
938 {
939 	int i = broadcast;
940 
941 	/* Format the IPMB header data. */
942 	smi_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
943 	smi_msg->data[1] = IPMI_SEND_MSG_CMD;
944 	smi_msg->data[2] = ipmb_addr->channel;
945 	if (broadcast)
946 		smi_msg->data[3] = 0;
947 	smi_msg->data[i+3] = ipmb_addr->slave_addr;
948 	smi_msg->data[i+4] = (msg->netfn << 2) | (ipmb_addr->lun & 0x3);
949 	smi_msg->data[i+5] = ipmb_checksum(&(smi_msg->data[i+3]), 2);
950 	smi_msg->data[i+6] = source_address;
951 	smi_msg->data[i+7] = (ipmb_seq << 2) | source_lun;
952 	smi_msg->data[i+8] = msg->cmd;
953 
954 	/* Now tack on the data to the message. */
955 	if (msg->data_len > 0)
956 		memcpy(&(smi_msg->data[i+9]), msg->data,
957 		       msg->data_len);
958 	smi_msg->data_size = msg->data_len + 9;
959 
960 	/* Now calculate the checksum and tack it on. */
961 	smi_msg->data[i+smi_msg->data_size]
962 		= ipmb_checksum(&(smi_msg->data[i+6]),
963 				smi_msg->data_size-6);
964 
965 	/* Add on the checksum size and the offset from the
966 	   broadcast. */
967 	smi_msg->data_size += 1 + i;
968 
969 	smi_msg->msgid = msgid;
970 }
971 
972 static inline void format_lan_msg(struct ipmi_smi_msg   *smi_msg,
973 				  struct kernel_ipmi_msg *msg,
974 				  struct ipmi_lan_addr  *lan_addr,
975 				  long                  msgid,
976 				  unsigned char         ipmb_seq,
977 				  unsigned char         source_lun)
978 {
979 	/* Format the IPMB header data. */
980 	smi_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
981 	smi_msg->data[1] = IPMI_SEND_MSG_CMD;
982 	smi_msg->data[2] = lan_addr->channel;
983 	smi_msg->data[3] = lan_addr->session_handle;
984 	smi_msg->data[4] = lan_addr->remote_SWID;
985 	smi_msg->data[5] = (msg->netfn << 2) | (lan_addr->lun & 0x3);
986 	smi_msg->data[6] = ipmb_checksum(&(smi_msg->data[4]), 2);
987 	smi_msg->data[7] = lan_addr->local_SWID;
988 	smi_msg->data[8] = (ipmb_seq << 2) | source_lun;
989 	smi_msg->data[9] = msg->cmd;
990 
991 	/* Now tack on the data to the message. */
992 	if (msg->data_len > 0)
993 		memcpy(&(smi_msg->data[10]), msg->data,
994 		       msg->data_len);
995 	smi_msg->data_size = msg->data_len + 10;
996 
997 	/* Now calculate the checksum and tack it on. */
998 	smi_msg->data[smi_msg->data_size]
999 		= ipmb_checksum(&(smi_msg->data[7]),
1000 				smi_msg->data_size-7);
1001 
1002 	/* Add on the checksum size and the offset from the
1003 	   broadcast. */
1004 	smi_msg->data_size += 1;
1005 
1006 	smi_msg->msgid = msgid;
1007 }
1008 
1009 /* Separate from ipmi_request so that the user does not have to be
1010    supplied in certain circumstances (mainly at panic time).  If
1011    messages are supplied, they will be freed, even if an error
1012    occurs. */
1013 static inline int i_ipmi_request(ipmi_user_t          user,
1014 				 ipmi_smi_t           intf,
1015 				 struct ipmi_addr     *addr,
1016 				 long                 msgid,
1017 				 struct kernel_ipmi_msg *msg,
1018 				 void                 *user_msg_data,
1019 				 void                 *supplied_smi,
1020 				 struct ipmi_recv_msg *supplied_recv,
1021 				 int                  priority,
1022 				 unsigned char        source_address,
1023 				 unsigned char        source_lun,
1024 				 int                  retries,
1025 				 unsigned int         retry_time_ms)
1026 {
1027 	int                  rv = 0;
1028 	struct ipmi_smi_msg  *smi_msg;
1029 	struct ipmi_recv_msg *recv_msg;
1030 	unsigned long        flags;
1031 
1032 
1033 	if (supplied_recv) {
1034 		recv_msg = supplied_recv;
1035 	} else {
1036 		recv_msg = ipmi_alloc_recv_msg();
1037 		if (recv_msg == NULL) {
1038 			return -ENOMEM;
1039 		}
1040 	}
1041 	recv_msg->user_msg_data = user_msg_data;
1042 
1043 	if (supplied_smi) {
1044 		smi_msg = (struct ipmi_smi_msg *) supplied_smi;
1045 	} else {
1046 		smi_msg = ipmi_alloc_smi_msg();
1047 		if (smi_msg == NULL) {
1048 			ipmi_free_recv_msg(recv_msg);
1049 			return -ENOMEM;
1050 		}
1051 	}
1052 
1053 	recv_msg->user = user;
1054 	recv_msg->msgid = msgid;
1055 	/* Store the message to send in the receive message so timeout
1056 	   responses can get the proper response data. */
1057 	recv_msg->msg = *msg;
1058 
1059 	if (addr->addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE) {
1060 		struct ipmi_system_interface_addr *smi_addr;
1061 
1062 		if (msg->netfn & 1) {
1063 			/* Responses are not allowed to the SMI. */
1064 			rv = -EINVAL;
1065 			goto out_err;
1066 		}
1067 
1068 		smi_addr = (struct ipmi_system_interface_addr *) addr;
1069 		if (smi_addr->lun > 3) {
1070 			spin_lock_irqsave(&intf->counter_lock, flags);
1071 			intf->sent_invalid_commands++;
1072 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1073 			rv = -EINVAL;
1074 			goto out_err;
1075 		}
1076 
1077 		memcpy(&recv_msg->addr, smi_addr, sizeof(*smi_addr));
1078 
1079 		if ((msg->netfn == IPMI_NETFN_APP_REQUEST)
1080 		    && ((msg->cmd == IPMI_SEND_MSG_CMD)
1081 			|| (msg->cmd == IPMI_GET_MSG_CMD)
1082 			|| (msg->cmd == IPMI_READ_EVENT_MSG_BUFFER_CMD)))
1083 		{
1084 			/* We don't let the user do these, since we manage
1085 			   the sequence numbers. */
1086 			spin_lock_irqsave(&intf->counter_lock, flags);
1087 			intf->sent_invalid_commands++;
1088 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1089 			rv = -EINVAL;
1090 			goto out_err;
1091 		}
1092 
1093 		if ((msg->data_len + 2) > IPMI_MAX_MSG_LENGTH) {
1094 			spin_lock_irqsave(&intf->counter_lock, flags);
1095 			intf->sent_invalid_commands++;
1096 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1097 			rv = -EMSGSIZE;
1098 			goto out_err;
1099 		}
1100 
1101 		smi_msg->data[0] = (msg->netfn << 2) | (smi_addr->lun & 0x3);
1102 		smi_msg->data[1] = msg->cmd;
1103 		smi_msg->msgid = msgid;
1104 		smi_msg->user_data = recv_msg;
1105 		if (msg->data_len > 0)
1106 			memcpy(&(smi_msg->data[2]), msg->data, msg->data_len);
1107 		smi_msg->data_size = msg->data_len + 2;
1108 		spin_lock_irqsave(&intf->counter_lock, flags);
1109 		intf->sent_local_commands++;
1110 		spin_unlock_irqrestore(&intf->counter_lock, flags);
1111 	} else if ((addr->addr_type == IPMI_IPMB_ADDR_TYPE)
1112 		   || (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE))
1113 	{
1114 		struct ipmi_ipmb_addr *ipmb_addr;
1115 		unsigned char         ipmb_seq;
1116 		long                  seqid;
1117 		int                   broadcast = 0;
1118 
1119 		if (addr->channel >= IPMI_MAX_CHANNELS) {
1120 		        spin_lock_irqsave(&intf->counter_lock, flags);
1121 			intf->sent_invalid_commands++;
1122 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1123 			rv = -EINVAL;
1124 			goto out_err;
1125 		}
1126 
1127 		if (intf->channels[addr->channel].medium
1128 		    != IPMI_CHANNEL_MEDIUM_IPMB)
1129 		{
1130 			spin_lock_irqsave(&intf->counter_lock, flags);
1131 			intf->sent_invalid_commands++;
1132 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1133 			rv = -EINVAL;
1134 			goto out_err;
1135 		}
1136 
1137 		if (retries < 0) {
1138 		    if (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE)
1139 			retries = 0; /* Don't retry broadcasts. */
1140 		    else
1141 			retries = 4;
1142 		}
1143 		if (addr->addr_type == IPMI_IPMB_BROADCAST_ADDR_TYPE) {
1144 		    /* Broadcasts add a zero at the beginning of the
1145 		       message, but otherwise is the same as an IPMB
1146 		       address. */
1147 		    addr->addr_type = IPMI_IPMB_ADDR_TYPE;
1148 		    broadcast = 1;
1149 		}
1150 
1151 
1152 		/* Default to 1 second retries. */
1153 		if (retry_time_ms == 0)
1154 		    retry_time_ms = 1000;
1155 
1156 		/* 9 for the header and 1 for the checksum, plus
1157                    possibly one for the broadcast. */
1158 		if ((msg->data_len + 10 + broadcast) > IPMI_MAX_MSG_LENGTH) {
1159 			spin_lock_irqsave(&intf->counter_lock, flags);
1160 			intf->sent_invalid_commands++;
1161 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1162 			rv = -EMSGSIZE;
1163 			goto out_err;
1164 		}
1165 
1166 		ipmb_addr = (struct ipmi_ipmb_addr *) addr;
1167 		if (ipmb_addr->lun > 3) {
1168 			spin_lock_irqsave(&intf->counter_lock, flags);
1169 			intf->sent_invalid_commands++;
1170 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1171 			rv = -EINVAL;
1172 			goto out_err;
1173 		}
1174 
1175 		memcpy(&recv_msg->addr, ipmb_addr, sizeof(*ipmb_addr));
1176 
1177 		if (recv_msg->msg.netfn & 0x1) {
1178 			/* It's a response, so use the user's sequence
1179                            from msgid. */
1180 			spin_lock_irqsave(&intf->counter_lock, flags);
1181 			intf->sent_ipmb_responses++;
1182 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1183 			format_ipmb_msg(smi_msg, msg, ipmb_addr, msgid,
1184 					msgid, broadcast,
1185 					source_address, source_lun);
1186 
1187 			/* Save the receive message so we can use it
1188 			   to deliver the response. */
1189 			smi_msg->user_data = recv_msg;
1190 		} else {
1191 			/* It's a command, so get a sequence for it. */
1192 
1193 			spin_lock_irqsave(&(intf->seq_lock), flags);
1194 
1195 			spin_lock(&intf->counter_lock);
1196 			intf->sent_ipmb_commands++;
1197 			spin_unlock(&intf->counter_lock);
1198 
1199 			/* Create a sequence number with a 1 second
1200                            timeout and 4 retries. */
1201 			rv = intf_next_seq(intf,
1202 					   recv_msg,
1203 					   retry_time_ms,
1204 					   retries,
1205 					   broadcast,
1206 					   &ipmb_seq,
1207 					   &seqid);
1208 			if (rv) {
1209 				/* We have used up all the sequence numbers,
1210 				   probably, so abort. */
1211 				spin_unlock_irqrestore(&(intf->seq_lock),
1212 						       flags);
1213 				goto out_err;
1214 			}
1215 
1216 			/* Store the sequence number in the message,
1217                            so that when the send message response
1218                            comes back we can start the timer. */
1219 			format_ipmb_msg(smi_msg, msg, ipmb_addr,
1220 					STORE_SEQ_IN_MSGID(ipmb_seq, seqid),
1221 					ipmb_seq, broadcast,
1222 					source_address, source_lun);
1223 
1224 			/* Copy the message into the recv message data, so we
1225 			   can retransmit it later if necessary. */
1226 			memcpy(recv_msg->msg_data, smi_msg->data,
1227 			       smi_msg->data_size);
1228 			recv_msg->msg.data = recv_msg->msg_data;
1229 			recv_msg->msg.data_len = smi_msg->data_size;
1230 
1231 			/* We don't unlock until here, because we need
1232                            to copy the completed message into the
1233                            recv_msg before we release the lock.
1234                            Otherwise, race conditions may bite us.  I
1235                            know that's pretty paranoid, but I prefer
1236                            to be correct. */
1237 			spin_unlock_irqrestore(&(intf->seq_lock), flags);
1238 		}
1239 	} else if (addr->addr_type == IPMI_LAN_ADDR_TYPE) {
1240 		struct ipmi_lan_addr  *lan_addr;
1241 		unsigned char         ipmb_seq;
1242 		long                  seqid;
1243 
1244 		if (addr->channel >= IPMI_NUM_CHANNELS) {
1245 			spin_lock_irqsave(&intf->counter_lock, flags);
1246 			intf->sent_invalid_commands++;
1247 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1248 			rv = -EINVAL;
1249 			goto out_err;
1250 		}
1251 
1252 		if ((intf->channels[addr->channel].medium
1253 		    != IPMI_CHANNEL_MEDIUM_8023LAN)
1254 		    && (intf->channels[addr->channel].medium
1255 			!= IPMI_CHANNEL_MEDIUM_ASYNC))
1256 		{
1257 			spin_lock_irqsave(&intf->counter_lock, flags);
1258 			intf->sent_invalid_commands++;
1259 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1260 			rv = -EINVAL;
1261 			goto out_err;
1262 		}
1263 
1264 		retries = 4;
1265 
1266 		/* Default to 1 second retries. */
1267 		if (retry_time_ms == 0)
1268 		    retry_time_ms = 1000;
1269 
1270 		/* 11 for the header and 1 for the checksum. */
1271 		if ((msg->data_len + 12) > IPMI_MAX_MSG_LENGTH) {
1272 			spin_lock_irqsave(&intf->counter_lock, flags);
1273 			intf->sent_invalid_commands++;
1274 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1275 			rv = -EMSGSIZE;
1276 			goto out_err;
1277 		}
1278 
1279 		lan_addr = (struct ipmi_lan_addr *) addr;
1280 		if (lan_addr->lun > 3) {
1281 			spin_lock_irqsave(&intf->counter_lock, flags);
1282 			intf->sent_invalid_commands++;
1283 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1284 			rv = -EINVAL;
1285 			goto out_err;
1286 		}
1287 
1288 		memcpy(&recv_msg->addr, lan_addr, sizeof(*lan_addr));
1289 
1290 		if (recv_msg->msg.netfn & 0x1) {
1291 			/* It's a response, so use the user's sequence
1292                            from msgid. */
1293 			spin_lock_irqsave(&intf->counter_lock, flags);
1294 			intf->sent_lan_responses++;
1295 			spin_unlock_irqrestore(&intf->counter_lock, flags);
1296 			format_lan_msg(smi_msg, msg, lan_addr, msgid,
1297 				       msgid, source_lun);
1298 
1299 			/* Save the receive message so we can use it
1300 			   to deliver the response. */
1301 			smi_msg->user_data = recv_msg;
1302 		} else {
1303 			/* It's a command, so get a sequence for it. */
1304 
1305 			spin_lock_irqsave(&(intf->seq_lock), flags);
1306 
1307 			spin_lock(&intf->counter_lock);
1308 			intf->sent_lan_commands++;
1309 			spin_unlock(&intf->counter_lock);
1310 
1311 			/* Create a sequence number with a 1 second
1312                            timeout and 4 retries. */
1313 			rv = intf_next_seq(intf,
1314 					   recv_msg,
1315 					   retry_time_ms,
1316 					   retries,
1317 					   0,
1318 					   &ipmb_seq,
1319 					   &seqid);
1320 			if (rv) {
1321 				/* We have used up all the sequence numbers,
1322 				   probably, so abort. */
1323 				spin_unlock_irqrestore(&(intf->seq_lock),
1324 						       flags);
1325 				goto out_err;
1326 			}
1327 
1328 			/* Store the sequence number in the message,
1329                            so that when the send message response
1330                            comes back we can start the timer. */
1331 			format_lan_msg(smi_msg, msg, lan_addr,
1332 				       STORE_SEQ_IN_MSGID(ipmb_seq, seqid),
1333 				       ipmb_seq, source_lun);
1334 
1335 			/* Copy the message into the recv message data, so we
1336 			   can retransmit it later if necessary. */
1337 			memcpy(recv_msg->msg_data, smi_msg->data,
1338 			       smi_msg->data_size);
1339 			recv_msg->msg.data = recv_msg->msg_data;
1340 			recv_msg->msg.data_len = smi_msg->data_size;
1341 
1342 			/* We don't unlock until here, because we need
1343                            to copy the completed message into the
1344                            recv_msg before we release the lock.
1345                            Otherwise, race conditions may bite us.  I
1346                            know that's pretty paranoid, but I prefer
1347                            to be correct. */
1348 			spin_unlock_irqrestore(&(intf->seq_lock), flags);
1349 		}
1350 	} else {
1351 	    /* Unknown address type. */
1352 		spin_lock_irqsave(&intf->counter_lock, flags);
1353 		intf->sent_invalid_commands++;
1354 		spin_unlock_irqrestore(&intf->counter_lock, flags);
1355 		rv = -EINVAL;
1356 		goto out_err;
1357 	}
1358 
1359 #ifdef DEBUG_MSGING
1360 	{
1361 		int m;
1362 		for (m = 0; m < smi_msg->data_size; m++)
1363 			printk(" %2.2x", smi_msg->data[m]);
1364 		printk("\n");
1365 	}
1366 #endif
1367 	intf->handlers->sender(intf->send_info, smi_msg, priority);
1368 
1369 	return 0;
1370 
1371  out_err:
1372 	ipmi_free_smi_msg(smi_msg);
1373 	ipmi_free_recv_msg(recv_msg);
1374 	return rv;
1375 }
1376 
1377 static int check_addr(ipmi_smi_t       intf,
1378 		      struct ipmi_addr *addr,
1379 		      unsigned char    *saddr,
1380 		      unsigned char    *lun)
1381 {
1382 	if (addr->channel >= IPMI_MAX_CHANNELS)
1383 		return -EINVAL;
1384 	*lun = intf->channels[addr->channel].lun;
1385 	*saddr = intf->channels[addr->channel].address;
1386 	return 0;
1387 }
1388 
1389 int ipmi_request_settime(ipmi_user_t      user,
1390 			 struct ipmi_addr *addr,
1391 			 long             msgid,
1392 			 struct kernel_ipmi_msg  *msg,
1393 			 void             *user_msg_data,
1394 			 int              priority,
1395 			 int              retries,
1396 			 unsigned int     retry_time_ms)
1397 {
1398 	unsigned char saddr, lun;
1399 	int           rv;
1400 
1401 	if (! user)
1402 		return -EINVAL;
1403 	rv = check_addr(user->intf, addr, &saddr, &lun);
1404 	if (rv)
1405 		return rv;
1406 	return i_ipmi_request(user,
1407 			      user->intf,
1408 			      addr,
1409 			      msgid,
1410 			      msg,
1411 			      user_msg_data,
1412 			      NULL, NULL,
1413 			      priority,
1414 			      saddr,
1415 			      lun,
1416 			      retries,
1417 			      retry_time_ms);
1418 }
1419 
1420 int ipmi_request_supply_msgs(ipmi_user_t          user,
1421 			     struct ipmi_addr     *addr,
1422 			     long                 msgid,
1423 			     struct kernel_ipmi_msg *msg,
1424 			     void                 *user_msg_data,
1425 			     void                 *supplied_smi,
1426 			     struct ipmi_recv_msg *supplied_recv,
1427 			     int                  priority)
1428 {
1429 	unsigned char saddr, lun;
1430 	int           rv;
1431 
1432 	if (! user)
1433 		return -EINVAL;
1434 	rv = check_addr(user->intf, addr, &saddr, &lun);
1435 	if (rv)
1436 		return rv;
1437 	return i_ipmi_request(user,
1438 			      user->intf,
1439 			      addr,
1440 			      msgid,
1441 			      msg,
1442 			      user_msg_data,
1443 			      supplied_smi,
1444 			      supplied_recv,
1445 			      priority,
1446 			      saddr,
1447 			      lun,
1448 			      -1, 0);
1449 }
1450 
1451 static int ipmb_file_read_proc(char *page, char **start, off_t off,
1452 			       int count, int *eof, void *data)
1453 {
1454 	char       *out = (char *) page;
1455 	ipmi_smi_t intf = data;
1456 	int        i;
1457 	int        rv= 0;
1458 
1459 	for (i = 0; i < IPMI_MAX_CHANNELS; i++)
1460 		rv += sprintf(out+rv, "%x ", intf->channels[i].address);
1461 	out[rv-1] = '\n'; /* Replace the final space with a newline */
1462 	out[rv] = '\0';
1463 	rv++;
1464 	return rv;
1465 }
1466 
1467 static int version_file_read_proc(char *page, char **start, off_t off,
1468 				  int count, int *eof, void *data)
1469 {
1470 	char       *out = (char *) page;
1471 	ipmi_smi_t intf = data;
1472 
1473 	return sprintf(out, "%d.%d\n",
1474 		       intf->version_major, intf->version_minor);
1475 }
1476 
1477 static int stat_file_read_proc(char *page, char **start, off_t off,
1478 			       int count, int *eof, void *data)
1479 {
1480 	char       *out = (char *) page;
1481 	ipmi_smi_t intf = data;
1482 
1483 	out += sprintf(out, "sent_invalid_commands:       %d\n",
1484 		       intf->sent_invalid_commands);
1485 	out += sprintf(out, "sent_local_commands:         %d\n",
1486 		       intf->sent_local_commands);
1487 	out += sprintf(out, "handled_local_responses:     %d\n",
1488 		       intf->handled_local_responses);
1489 	out += sprintf(out, "unhandled_local_responses:   %d\n",
1490 		       intf->unhandled_local_responses);
1491 	out += sprintf(out, "sent_ipmb_commands:          %d\n",
1492 		       intf->sent_ipmb_commands);
1493 	out += sprintf(out, "sent_ipmb_command_errs:      %d\n",
1494 		       intf->sent_ipmb_command_errs);
1495 	out += sprintf(out, "retransmitted_ipmb_commands: %d\n",
1496 		       intf->retransmitted_ipmb_commands);
1497 	out += sprintf(out, "timed_out_ipmb_commands:     %d\n",
1498 		       intf->timed_out_ipmb_commands);
1499 	out += sprintf(out, "timed_out_ipmb_broadcasts:   %d\n",
1500 		       intf->timed_out_ipmb_broadcasts);
1501 	out += sprintf(out, "sent_ipmb_responses:         %d\n",
1502 		       intf->sent_ipmb_responses);
1503 	out += sprintf(out, "handled_ipmb_responses:      %d\n",
1504 		       intf->handled_ipmb_responses);
1505 	out += sprintf(out, "invalid_ipmb_responses:      %d\n",
1506 		       intf->invalid_ipmb_responses);
1507 	out += sprintf(out, "unhandled_ipmb_responses:    %d\n",
1508 		       intf->unhandled_ipmb_responses);
1509 	out += sprintf(out, "sent_lan_commands:           %d\n",
1510 		       intf->sent_lan_commands);
1511 	out += sprintf(out, "sent_lan_command_errs:       %d\n",
1512 		       intf->sent_lan_command_errs);
1513 	out += sprintf(out, "retransmitted_lan_commands:  %d\n",
1514 		       intf->retransmitted_lan_commands);
1515 	out += sprintf(out, "timed_out_lan_commands:      %d\n",
1516 		       intf->timed_out_lan_commands);
1517 	out += sprintf(out, "sent_lan_responses:          %d\n",
1518 		       intf->sent_lan_responses);
1519 	out += sprintf(out, "handled_lan_responses:       %d\n",
1520 		       intf->handled_lan_responses);
1521 	out += sprintf(out, "invalid_lan_responses:       %d\n",
1522 		       intf->invalid_lan_responses);
1523 	out += sprintf(out, "unhandled_lan_responses:     %d\n",
1524 		       intf->unhandled_lan_responses);
1525 	out += sprintf(out, "handled_commands:            %d\n",
1526 		       intf->handled_commands);
1527 	out += sprintf(out, "invalid_commands:            %d\n",
1528 		       intf->invalid_commands);
1529 	out += sprintf(out, "unhandled_commands:          %d\n",
1530 		       intf->unhandled_commands);
1531 	out += sprintf(out, "invalid_events:              %d\n",
1532 		       intf->invalid_events);
1533 	out += sprintf(out, "events:                      %d\n",
1534 		       intf->events);
1535 
1536 	return (out - ((char *) page));
1537 }
1538 
1539 int ipmi_smi_add_proc_entry(ipmi_smi_t smi, char *name,
1540 			    read_proc_t *read_proc, write_proc_t *write_proc,
1541 			    void *data, struct module *owner)
1542 {
1543 	int                    rv = 0;
1544 #ifdef CONFIG_PROC_FS
1545 	struct proc_dir_entry  *file;
1546 	struct ipmi_proc_entry *entry;
1547 
1548 	/* Create a list element. */
1549 	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
1550 	if (!entry)
1551 		return -ENOMEM;
1552 	entry->name = kmalloc(strlen(name)+1, GFP_KERNEL);
1553 	if (!entry->name) {
1554 		kfree(entry);
1555 		return -ENOMEM;
1556 	}
1557 	strcpy(entry->name, name);
1558 
1559 	file = create_proc_entry(name, 0, smi->proc_dir);
1560 	if (!file) {
1561 		kfree(entry->name);
1562 		kfree(entry);
1563 		rv = -ENOMEM;
1564 	} else {
1565 		file->nlink = 1;
1566 		file->data = data;
1567 		file->read_proc = read_proc;
1568 		file->write_proc = write_proc;
1569 		file->owner = owner;
1570 
1571 		spin_lock(&smi->proc_entry_lock);
1572 		/* Stick it on the list. */
1573 		entry->next = smi->proc_entries;
1574 		smi->proc_entries = entry;
1575 		spin_unlock(&smi->proc_entry_lock);
1576 	}
1577 #endif /* CONFIG_PROC_FS */
1578 
1579 	return rv;
1580 }
1581 
1582 static int add_proc_entries(ipmi_smi_t smi, int num)
1583 {
1584 	int rv = 0;
1585 
1586 #ifdef CONFIG_PROC_FS
1587 	sprintf(smi->proc_dir_name, "%d", num);
1588 	smi->proc_dir = proc_mkdir(smi->proc_dir_name, proc_ipmi_root);
1589 	if (!smi->proc_dir)
1590 		rv = -ENOMEM;
1591 	else {
1592 		smi->proc_dir->owner = THIS_MODULE;
1593 	}
1594 
1595 	if (rv == 0)
1596 		rv = ipmi_smi_add_proc_entry(smi, "stats",
1597 					     stat_file_read_proc, NULL,
1598 					     smi, THIS_MODULE);
1599 
1600 	if (rv == 0)
1601 		rv = ipmi_smi_add_proc_entry(smi, "ipmb",
1602 					     ipmb_file_read_proc, NULL,
1603 					     smi, THIS_MODULE);
1604 
1605 	if (rv == 0)
1606 		rv = ipmi_smi_add_proc_entry(smi, "version",
1607 					     version_file_read_proc, NULL,
1608 					     smi, THIS_MODULE);
1609 #endif /* CONFIG_PROC_FS */
1610 
1611 	return rv;
1612 }
1613 
1614 static void remove_proc_entries(ipmi_smi_t smi)
1615 {
1616 #ifdef CONFIG_PROC_FS
1617 	struct ipmi_proc_entry *entry;
1618 
1619 	spin_lock(&smi->proc_entry_lock);
1620 	while (smi->proc_entries) {
1621 		entry = smi->proc_entries;
1622 		smi->proc_entries = entry->next;
1623 
1624 		remove_proc_entry(entry->name, smi->proc_dir);
1625 		kfree(entry->name);
1626 		kfree(entry);
1627 	}
1628 	spin_unlock(&smi->proc_entry_lock);
1629 	remove_proc_entry(smi->proc_dir_name, proc_ipmi_root);
1630 #endif /* CONFIG_PROC_FS */
1631 }
1632 
1633 static int
1634 send_channel_info_cmd(ipmi_smi_t intf, int chan)
1635 {
1636 	struct kernel_ipmi_msg            msg;
1637 	unsigned char                     data[1];
1638 	struct ipmi_system_interface_addr si;
1639 
1640 	si.addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
1641 	si.channel = IPMI_BMC_CHANNEL;
1642 	si.lun = 0;
1643 
1644 	msg.netfn = IPMI_NETFN_APP_REQUEST;
1645 	msg.cmd = IPMI_GET_CHANNEL_INFO_CMD;
1646 	msg.data = data;
1647 	msg.data_len = 1;
1648 	data[0] = chan;
1649 	return i_ipmi_request(NULL,
1650 			      intf,
1651 			      (struct ipmi_addr *) &si,
1652 			      0,
1653 			      &msg,
1654 			      intf,
1655 			      NULL,
1656 			      NULL,
1657 			      0,
1658 			      intf->channels[0].address,
1659 			      intf->channels[0].lun,
1660 			      -1, 0);
1661 }
1662 
1663 static void
1664 channel_handler(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
1665 {
1666 	int rv = 0;
1667 	int chan;
1668 
1669 	if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
1670 	    && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE)
1671 	    && (msg->msg.cmd == IPMI_GET_CHANNEL_INFO_CMD))
1672 	{
1673 		/* It's the one we want */
1674 		if (msg->msg.data[0] != 0) {
1675 			/* Got an error from the channel, just go on. */
1676 
1677 			if (msg->msg.data[0] == IPMI_INVALID_COMMAND_ERR) {
1678 				/* If the MC does not support this
1679 				   command, that is legal.  We just
1680 				   assume it has one IPMB at channel
1681 				   zero. */
1682 				intf->channels[0].medium
1683 					= IPMI_CHANNEL_MEDIUM_IPMB;
1684 				intf->channels[0].protocol
1685 					= IPMI_CHANNEL_PROTOCOL_IPMB;
1686 				rv = -ENOSYS;
1687 
1688 				intf->curr_channel = IPMI_MAX_CHANNELS;
1689 				wake_up(&intf->waitq);
1690 				goto out;
1691 			}
1692 			goto next_channel;
1693 		}
1694 		if (msg->msg.data_len < 4) {
1695 			/* Message not big enough, just go on. */
1696 			goto next_channel;
1697 		}
1698 		chan = intf->curr_channel;
1699 		intf->channels[chan].medium = msg->msg.data[2] & 0x7f;
1700 		intf->channels[chan].protocol = msg->msg.data[3] & 0x1f;
1701 
1702 	next_channel:
1703 		intf->curr_channel++;
1704 		if (intf->curr_channel >= IPMI_MAX_CHANNELS)
1705 			wake_up(&intf->waitq);
1706 		else
1707 			rv = send_channel_info_cmd(intf, intf->curr_channel);
1708 
1709 		if (rv) {
1710 			/* Got an error somehow, just give up. */
1711 			intf->curr_channel = IPMI_MAX_CHANNELS;
1712 			wake_up(&intf->waitq);
1713 
1714 			printk(KERN_WARNING PFX
1715 			       "Error sending channel information: %d\n",
1716 			       rv);
1717 		}
1718 	}
1719  out:
1720 	return;
1721 }
1722 
1723 int ipmi_register_smi(struct ipmi_smi_handlers *handlers,
1724 		      void		       *send_info,
1725 		      unsigned char            version_major,
1726 		      unsigned char            version_minor,
1727 		      unsigned char            slave_addr,
1728 		      ipmi_smi_t               *intf)
1729 {
1730 	int              i, j;
1731 	int              rv;
1732 	ipmi_smi_t       new_intf;
1733 	unsigned long    flags;
1734 
1735 
1736 	/* Make sure the driver is actually initialized, this handles
1737 	   problems with initialization order. */
1738 	if (!initialized) {
1739 		rv = ipmi_init_msghandler();
1740 		if (rv)
1741 			return rv;
1742 		/* The init code doesn't return an error if it was turned
1743 		   off, but it won't initialize.  Check that. */
1744 		if (!initialized)
1745 			return -ENODEV;
1746 	}
1747 
1748 	new_intf = kmalloc(sizeof(*new_intf), GFP_KERNEL);
1749 	if (!new_intf)
1750 		return -ENOMEM;
1751 	memset(new_intf, 0, sizeof(*new_intf));
1752 
1753 	new_intf->proc_dir = NULL;
1754 
1755 	rv = -ENOMEM;
1756 
1757 	down_write(&interfaces_sem);
1758 	for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
1759 		if (ipmi_interfaces[i] == NULL) {
1760 			new_intf->intf_num = i;
1761 			new_intf->version_major = version_major;
1762 			new_intf->version_minor = version_minor;
1763 			for (j = 0; j < IPMI_MAX_CHANNELS; j++) {
1764 				new_intf->channels[j].address
1765 					= IPMI_BMC_SLAVE_ADDR;
1766 				new_intf->channels[j].lun = 2;
1767 			}
1768 			if (slave_addr != 0)
1769 				new_intf->channels[0].address = slave_addr;
1770 			rwlock_init(&(new_intf->users_lock));
1771 			INIT_LIST_HEAD(&(new_intf->users));
1772 			new_intf->handlers = handlers;
1773 			new_intf->send_info = send_info;
1774 			spin_lock_init(&(new_intf->seq_lock));
1775 			for (j = 0; j < IPMI_IPMB_NUM_SEQ; j++) {
1776 				new_intf->seq_table[j].inuse = 0;
1777 				new_intf->seq_table[j].seqid = 0;
1778 			}
1779 			new_intf->curr_seq = 0;
1780 #ifdef CONFIG_PROC_FS
1781 			spin_lock_init(&(new_intf->proc_entry_lock));
1782 #endif
1783 			spin_lock_init(&(new_intf->waiting_msgs_lock));
1784 			INIT_LIST_HEAD(&(new_intf->waiting_msgs));
1785 			spin_lock_init(&(new_intf->events_lock));
1786 			INIT_LIST_HEAD(&(new_intf->waiting_events));
1787 			new_intf->waiting_events_count = 0;
1788 			rwlock_init(&(new_intf->cmd_rcvr_lock));
1789 			init_waitqueue_head(&new_intf->waitq);
1790 			INIT_LIST_HEAD(&(new_intf->cmd_rcvrs));
1791 
1792 			spin_lock_init(&(new_intf->counter_lock));
1793 
1794 			spin_lock_irqsave(&interfaces_lock, flags);
1795 			ipmi_interfaces[i] = new_intf;
1796 			spin_unlock_irqrestore(&interfaces_lock, flags);
1797 
1798 			rv = 0;
1799 			*intf = new_intf;
1800 			break;
1801 		}
1802 	}
1803 
1804 	downgrade_write(&interfaces_sem);
1805 
1806 	if (rv == 0)
1807 		rv = add_proc_entries(*intf, i);
1808 
1809 	if (rv == 0) {
1810 		if ((version_major > 1)
1811 		    || ((version_major == 1) && (version_minor >= 5)))
1812 		{
1813 			/* Start scanning the channels to see what is
1814 			   available. */
1815 			(*intf)->null_user_handler = channel_handler;
1816 			(*intf)->curr_channel = 0;
1817 			rv = send_channel_info_cmd(*intf, 0);
1818 			if (rv)
1819 				goto out;
1820 
1821 			/* Wait for the channel info to be read. */
1822 			up_read(&interfaces_sem);
1823 			wait_event((*intf)->waitq,
1824 				   ((*intf)->curr_channel>=IPMI_MAX_CHANNELS));
1825 			down_read(&interfaces_sem);
1826 
1827 			if (ipmi_interfaces[i] != new_intf)
1828 				/* Well, it went away.  Just return. */
1829 				goto out;
1830 		} else {
1831 			/* Assume a single IPMB channel at zero. */
1832 			(*intf)->channels[0].medium = IPMI_CHANNEL_MEDIUM_IPMB;
1833 			(*intf)->channels[0].protocol
1834 				= IPMI_CHANNEL_PROTOCOL_IPMB;
1835   		}
1836 
1837 		/* Call all the watcher interfaces to tell
1838 		   them that a new interface is available. */
1839 		call_smi_watchers(i);
1840 	}
1841 
1842  out:
1843 	up_read(&interfaces_sem);
1844 
1845 	if (rv) {
1846 		if (new_intf->proc_dir)
1847 			remove_proc_entries(new_intf);
1848 		kfree(new_intf);
1849 	}
1850 
1851 	return rv;
1852 }
1853 
1854 static void free_recv_msg_list(struct list_head *q)
1855 {
1856 	struct ipmi_recv_msg *msg, *msg2;
1857 
1858 	list_for_each_entry_safe(msg, msg2, q, link) {
1859 		list_del(&msg->link);
1860 		ipmi_free_recv_msg(msg);
1861 	}
1862 }
1863 
1864 static void free_cmd_rcvr_list(struct list_head *q)
1865 {
1866 	struct cmd_rcvr  *rcvr, *rcvr2;
1867 
1868 	list_for_each_entry_safe(rcvr, rcvr2, q, link) {
1869 		list_del(&rcvr->link);
1870 		kfree(rcvr);
1871 	}
1872 }
1873 
1874 static void clean_up_interface_data(ipmi_smi_t intf)
1875 {
1876 	int i;
1877 
1878 	free_recv_msg_list(&(intf->waiting_msgs));
1879 	free_recv_msg_list(&(intf->waiting_events));
1880 	free_cmd_rcvr_list(&(intf->cmd_rcvrs));
1881 
1882 	for (i = 0; i < IPMI_IPMB_NUM_SEQ; i++) {
1883 		if ((intf->seq_table[i].inuse)
1884 		    && (intf->seq_table[i].recv_msg))
1885 		{
1886 			ipmi_free_recv_msg(intf->seq_table[i].recv_msg);
1887 		}
1888 	}
1889 }
1890 
1891 int ipmi_unregister_smi(ipmi_smi_t intf)
1892 {
1893 	int                     rv = -ENODEV;
1894 	int                     i;
1895 	struct ipmi_smi_watcher *w;
1896 	unsigned long           flags;
1897 
1898 	down_write(&interfaces_sem);
1899 	if (list_empty(&(intf->users)))
1900 	{
1901 		for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
1902 			if (ipmi_interfaces[i] == intf) {
1903 				remove_proc_entries(intf);
1904 				spin_lock_irqsave(&interfaces_lock, flags);
1905 				ipmi_interfaces[i] = NULL;
1906 				clean_up_interface_data(intf);
1907 				spin_unlock_irqrestore(&interfaces_lock,flags);
1908 				kfree(intf);
1909 				rv = 0;
1910 				goto out_call_watcher;
1911 			}
1912 		}
1913 	} else {
1914 		rv = -EBUSY;
1915 	}
1916 	up_write(&interfaces_sem);
1917 
1918 	return rv;
1919 
1920  out_call_watcher:
1921 	downgrade_write(&interfaces_sem);
1922 
1923 	/* Call all the watcher interfaces to tell them that
1924 	   an interface is gone. */
1925 	down_read(&smi_watchers_sem);
1926 	list_for_each_entry(w, &smi_watchers, link) {
1927 		w->smi_gone(i);
1928 	}
1929 	up_read(&smi_watchers_sem);
1930 	up_read(&interfaces_sem);
1931 	return 0;
1932 }
1933 
1934 static int handle_ipmb_get_msg_rsp(ipmi_smi_t          intf,
1935 				   struct ipmi_smi_msg *msg)
1936 {
1937 	struct ipmi_ipmb_addr ipmb_addr;
1938 	struct ipmi_recv_msg  *recv_msg;
1939 	unsigned long         flags;
1940 
1941 
1942 	/* This is 11, not 10, because the response must contain a
1943 	 * completion code. */
1944 	if (msg->rsp_size < 11) {
1945 		/* Message not big enough, just ignore it. */
1946 		spin_lock_irqsave(&intf->counter_lock, flags);
1947 		intf->invalid_ipmb_responses++;
1948 		spin_unlock_irqrestore(&intf->counter_lock, flags);
1949 		return 0;
1950 	}
1951 
1952 	if (msg->rsp[2] != 0) {
1953 		/* An error getting the response, just ignore it. */
1954 		return 0;
1955 	}
1956 
1957 	ipmb_addr.addr_type = IPMI_IPMB_ADDR_TYPE;
1958 	ipmb_addr.slave_addr = msg->rsp[6];
1959 	ipmb_addr.channel = msg->rsp[3] & 0x0f;
1960 	ipmb_addr.lun = msg->rsp[7] & 3;
1961 
1962 	/* It's a response from a remote entity.  Look up the sequence
1963 	   number and handle the response. */
1964 	if (intf_find_seq(intf,
1965 			  msg->rsp[7] >> 2,
1966 			  msg->rsp[3] & 0x0f,
1967 			  msg->rsp[8],
1968 			  (msg->rsp[4] >> 2) & (~1),
1969 			  (struct ipmi_addr *) &(ipmb_addr),
1970 			  &recv_msg))
1971 	{
1972 		/* We were unable to find the sequence number,
1973 		   so just nuke the message. */
1974 		spin_lock_irqsave(&intf->counter_lock, flags);
1975 		intf->unhandled_ipmb_responses++;
1976 		spin_unlock_irqrestore(&intf->counter_lock, flags);
1977 		return 0;
1978 	}
1979 
1980 	memcpy(recv_msg->msg_data,
1981 	       &(msg->rsp[9]),
1982 	       msg->rsp_size - 9);
1983 	/* THe other fields matched, so no need to set them, except
1984            for netfn, which needs to be the response that was
1985            returned, not the request value. */
1986 	recv_msg->msg.netfn = msg->rsp[4] >> 2;
1987 	recv_msg->msg.data = recv_msg->msg_data;
1988 	recv_msg->msg.data_len = msg->rsp_size - 10;
1989 	recv_msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
1990 	spin_lock_irqsave(&intf->counter_lock, flags);
1991 	intf->handled_ipmb_responses++;
1992 	spin_unlock_irqrestore(&intf->counter_lock, flags);
1993 	deliver_response(recv_msg);
1994 
1995 	return 0;
1996 }
1997 
1998 static int handle_ipmb_get_msg_cmd(ipmi_smi_t          intf,
1999 				   struct ipmi_smi_msg *msg)
2000 {
2001 	struct cmd_rcvr       *rcvr;
2002 	int                   rv = 0;
2003 	unsigned char         netfn;
2004 	unsigned char         cmd;
2005 	ipmi_user_t           user = NULL;
2006 	struct ipmi_ipmb_addr *ipmb_addr;
2007 	struct ipmi_recv_msg  *recv_msg;
2008 	unsigned long         flags;
2009 
2010 	if (msg->rsp_size < 10) {
2011 		/* Message not big enough, just ignore it. */
2012 		spin_lock_irqsave(&intf->counter_lock, flags);
2013 		intf->invalid_commands++;
2014 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2015 		return 0;
2016 	}
2017 
2018 	if (msg->rsp[2] != 0) {
2019 		/* An error getting the response, just ignore it. */
2020 		return 0;
2021 	}
2022 
2023 	netfn = msg->rsp[4] >> 2;
2024 	cmd = msg->rsp[8];
2025 
2026 	read_lock(&(intf->cmd_rcvr_lock));
2027 
2028 	/* Find the command/netfn. */
2029 	list_for_each_entry(rcvr, &(intf->cmd_rcvrs), link) {
2030 		if ((rcvr->netfn == netfn) && (rcvr->cmd == cmd)) {
2031 			user = rcvr->user;
2032 			break;
2033 		}
2034 	}
2035 	read_unlock(&(intf->cmd_rcvr_lock));
2036 
2037 	if (user == NULL) {
2038 		/* We didn't find a user, deliver an error response. */
2039 		spin_lock_irqsave(&intf->counter_lock, flags);
2040 		intf->unhandled_commands++;
2041 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2042 
2043 		msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
2044 		msg->data[1] = IPMI_SEND_MSG_CMD;
2045 		msg->data[2] = msg->rsp[3];
2046 		msg->data[3] = msg->rsp[6];
2047                 msg->data[4] = ((netfn + 1) << 2) | (msg->rsp[7] & 0x3);
2048 		msg->data[5] = ipmb_checksum(&(msg->data[3]), 2);
2049 		msg->data[6] = intf->channels[msg->rsp[3] & 0xf].address;
2050                 /* rqseq/lun */
2051                 msg->data[7] = (msg->rsp[7] & 0xfc) | (msg->rsp[4] & 0x3);
2052 		msg->data[8] = msg->rsp[8]; /* cmd */
2053 		msg->data[9] = IPMI_INVALID_CMD_COMPLETION_CODE;
2054 		msg->data[10] = ipmb_checksum(&(msg->data[6]), 4);
2055 		msg->data_size = 11;
2056 
2057 #ifdef DEBUG_MSGING
2058 	{
2059 		int m;
2060 		printk("Invalid command:");
2061 		for (m = 0; m < msg->data_size; m++)
2062 			printk(" %2.2x", msg->data[m]);
2063 		printk("\n");
2064 	}
2065 #endif
2066 		intf->handlers->sender(intf->send_info, msg, 0);
2067 
2068 		rv = -1; /* We used the message, so return the value that
2069 			    causes it to not be freed or queued. */
2070 	} else {
2071 		/* Deliver the message to the user. */
2072 		spin_lock_irqsave(&intf->counter_lock, flags);
2073 		intf->handled_commands++;
2074 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2075 
2076 		recv_msg = ipmi_alloc_recv_msg();
2077 		if (! recv_msg) {
2078 			/* We couldn't allocate memory for the
2079                            message, so requeue it for handling
2080                            later. */
2081 			rv = 1;
2082 		} else {
2083 			/* Extract the source address from the data. */
2084 			ipmb_addr = (struct ipmi_ipmb_addr *) &recv_msg->addr;
2085 			ipmb_addr->addr_type = IPMI_IPMB_ADDR_TYPE;
2086 			ipmb_addr->slave_addr = msg->rsp[6];
2087 			ipmb_addr->lun = msg->rsp[7] & 3;
2088 			ipmb_addr->channel = msg->rsp[3] & 0xf;
2089 
2090 			/* Extract the rest of the message information
2091 			   from the IPMB header.*/
2092 			recv_msg->user = user;
2093 			recv_msg->recv_type = IPMI_CMD_RECV_TYPE;
2094 			recv_msg->msgid = msg->rsp[7] >> 2;
2095 			recv_msg->msg.netfn = msg->rsp[4] >> 2;
2096 			recv_msg->msg.cmd = msg->rsp[8];
2097 			recv_msg->msg.data = recv_msg->msg_data;
2098 
2099 			/* We chop off 10, not 9 bytes because the checksum
2100 			   at the end also needs to be removed. */
2101 			recv_msg->msg.data_len = msg->rsp_size - 10;
2102 			memcpy(recv_msg->msg_data,
2103 			       &(msg->rsp[9]),
2104 			       msg->rsp_size - 10);
2105 			deliver_response(recv_msg);
2106 		}
2107 	}
2108 
2109 	return rv;
2110 }
2111 
2112 static int handle_lan_get_msg_rsp(ipmi_smi_t          intf,
2113 				  struct ipmi_smi_msg *msg)
2114 {
2115 	struct ipmi_lan_addr  lan_addr;
2116 	struct ipmi_recv_msg  *recv_msg;
2117 	unsigned long         flags;
2118 
2119 
2120 	/* This is 13, not 12, because the response must contain a
2121 	 * completion code. */
2122 	if (msg->rsp_size < 13) {
2123 		/* Message not big enough, just ignore it. */
2124 		spin_lock_irqsave(&intf->counter_lock, flags);
2125 		intf->invalid_lan_responses++;
2126 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2127 		return 0;
2128 	}
2129 
2130 	if (msg->rsp[2] != 0) {
2131 		/* An error getting the response, just ignore it. */
2132 		return 0;
2133 	}
2134 
2135 	lan_addr.addr_type = IPMI_LAN_ADDR_TYPE;
2136 	lan_addr.session_handle = msg->rsp[4];
2137 	lan_addr.remote_SWID = msg->rsp[8];
2138 	lan_addr.local_SWID = msg->rsp[5];
2139 	lan_addr.channel = msg->rsp[3] & 0x0f;
2140 	lan_addr.privilege = msg->rsp[3] >> 4;
2141 	lan_addr.lun = msg->rsp[9] & 3;
2142 
2143 	/* It's a response from a remote entity.  Look up the sequence
2144 	   number and handle the response. */
2145 	if (intf_find_seq(intf,
2146 			  msg->rsp[9] >> 2,
2147 			  msg->rsp[3] & 0x0f,
2148 			  msg->rsp[10],
2149 			  (msg->rsp[6] >> 2) & (~1),
2150 			  (struct ipmi_addr *) &(lan_addr),
2151 			  &recv_msg))
2152 	{
2153 		/* We were unable to find the sequence number,
2154 		   so just nuke the message. */
2155 		spin_lock_irqsave(&intf->counter_lock, flags);
2156 		intf->unhandled_lan_responses++;
2157 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2158 		return 0;
2159 	}
2160 
2161 	memcpy(recv_msg->msg_data,
2162 	       &(msg->rsp[11]),
2163 	       msg->rsp_size - 11);
2164 	/* The other fields matched, so no need to set them, except
2165            for netfn, which needs to be the response that was
2166            returned, not the request value. */
2167 	recv_msg->msg.netfn = msg->rsp[6] >> 2;
2168 	recv_msg->msg.data = recv_msg->msg_data;
2169 	recv_msg->msg.data_len = msg->rsp_size - 12;
2170 	recv_msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
2171 	spin_lock_irqsave(&intf->counter_lock, flags);
2172 	intf->handled_lan_responses++;
2173 	spin_unlock_irqrestore(&intf->counter_lock, flags);
2174 	deliver_response(recv_msg);
2175 
2176 	return 0;
2177 }
2178 
2179 static int handle_lan_get_msg_cmd(ipmi_smi_t          intf,
2180 				  struct ipmi_smi_msg *msg)
2181 {
2182 	struct cmd_rcvr       *rcvr;
2183 	int                   rv = 0;
2184 	unsigned char         netfn;
2185 	unsigned char         cmd;
2186 	ipmi_user_t           user = NULL;
2187 	struct ipmi_lan_addr  *lan_addr;
2188 	struct ipmi_recv_msg  *recv_msg;
2189 	unsigned long         flags;
2190 
2191 	if (msg->rsp_size < 12) {
2192 		/* Message not big enough, just ignore it. */
2193 		spin_lock_irqsave(&intf->counter_lock, flags);
2194 		intf->invalid_commands++;
2195 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2196 		return 0;
2197 	}
2198 
2199 	if (msg->rsp[2] != 0) {
2200 		/* An error getting the response, just ignore it. */
2201 		return 0;
2202 	}
2203 
2204 	netfn = msg->rsp[6] >> 2;
2205 	cmd = msg->rsp[10];
2206 
2207 	read_lock(&(intf->cmd_rcvr_lock));
2208 
2209 	/* Find the command/netfn. */
2210 	list_for_each_entry(rcvr, &(intf->cmd_rcvrs), link) {
2211 		if ((rcvr->netfn == netfn) && (rcvr->cmd == cmd)) {
2212 			user = rcvr->user;
2213 			break;
2214 		}
2215 	}
2216 	read_unlock(&(intf->cmd_rcvr_lock));
2217 
2218 	if (user == NULL) {
2219 		/* We didn't find a user, deliver an error response. */
2220 		spin_lock_irqsave(&intf->counter_lock, flags);
2221 		intf->unhandled_commands++;
2222 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2223 
2224 		rv = 0; /* Don't do anything with these messages, just
2225 			   allow them to be freed. */
2226 	} else {
2227 		/* Deliver the message to the user. */
2228 		spin_lock_irqsave(&intf->counter_lock, flags);
2229 		intf->handled_commands++;
2230 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2231 
2232 		recv_msg = ipmi_alloc_recv_msg();
2233 		if (! recv_msg) {
2234 			/* We couldn't allocate memory for the
2235                            message, so requeue it for handling
2236                            later. */
2237 			rv = 1;
2238 		} else {
2239 			/* Extract the source address from the data. */
2240 			lan_addr = (struct ipmi_lan_addr *) &recv_msg->addr;
2241 			lan_addr->addr_type = IPMI_LAN_ADDR_TYPE;
2242 			lan_addr->session_handle = msg->rsp[4];
2243 			lan_addr->remote_SWID = msg->rsp[8];
2244 			lan_addr->local_SWID = msg->rsp[5];
2245 			lan_addr->lun = msg->rsp[9] & 3;
2246 			lan_addr->channel = msg->rsp[3] & 0xf;
2247 			lan_addr->privilege = msg->rsp[3] >> 4;
2248 
2249 			/* Extract the rest of the message information
2250 			   from the IPMB header.*/
2251 			recv_msg->user = user;
2252 			recv_msg->recv_type = IPMI_CMD_RECV_TYPE;
2253 			recv_msg->msgid = msg->rsp[9] >> 2;
2254 			recv_msg->msg.netfn = msg->rsp[6] >> 2;
2255 			recv_msg->msg.cmd = msg->rsp[10];
2256 			recv_msg->msg.data = recv_msg->msg_data;
2257 
2258 			/* We chop off 12, not 11 bytes because the checksum
2259 			   at the end also needs to be removed. */
2260 			recv_msg->msg.data_len = msg->rsp_size - 12;
2261 			memcpy(recv_msg->msg_data,
2262 			       &(msg->rsp[11]),
2263 			       msg->rsp_size - 12);
2264 			deliver_response(recv_msg);
2265 		}
2266 	}
2267 
2268 	return rv;
2269 }
2270 
2271 static void copy_event_into_recv_msg(struct ipmi_recv_msg *recv_msg,
2272 				     struct ipmi_smi_msg  *msg)
2273 {
2274 	struct ipmi_system_interface_addr *smi_addr;
2275 
2276 	recv_msg->msgid = 0;
2277 	smi_addr = (struct ipmi_system_interface_addr *) &(recv_msg->addr);
2278 	smi_addr->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
2279 	smi_addr->channel = IPMI_BMC_CHANNEL;
2280 	smi_addr->lun = msg->rsp[0] & 3;
2281 	recv_msg->recv_type = IPMI_ASYNC_EVENT_RECV_TYPE;
2282 	recv_msg->msg.netfn = msg->rsp[0] >> 2;
2283 	recv_msg->msg.cmd = msg->rsp[1];
2284 	memcpy(recv_msg->msg_data, &(msg->rsp[3]), msg->rsp_size - 3);
2285 	recv_msg->msg.data = recv_msg->msg_data;
2286 	recv_msg->msg.data_len = msg->rsp_size - 3;
2287 }
2288 
2289 /* This will be called with the intf->users_lock read-locked, so no need
2290    to do that here. */
2291 static int handle_read_event_rsp(ipmi_smi_t          intf,
2292 				 struct ipmi_smi_msg *msg)
2293 {
2294 	struct ipmi_recv_msg *recv_msg, *recv_msg2;
2295 	struct list_head     msgs;
2296 	ipmi_user_t          user;
2297 	int                  rv = 0;
2298 	int                  deliver_count = 0;
2299 	unsigned long        flags;
2300 
2301 	if (msg->rsp_size < 19) {
2302 		/* Message is too small to be an IPMB event. */
2303 		spin_lock_irqsave(&intf->counter_lock, flags);
2304 		intf->invalid_events++;
2305 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2306 		return 0;
2307 	}
2308 
2309 	if (msg->rsp[2] != 0) {
2310 		/* An error getting the event, just ignore it. */
2311 		return 0;
2312 	}
2313 
2314 	INIT_LIST_HEAD(&msgs);
2315 
2316 	spin_lock_irqsave(&(intf->events_lock), flags);
2317 
2318 	spin_lock(&intf->counter_lock);
2319 	intf->events++;
2320 	spin_unlock(&intf->counter_lock);
2321 
2322 	/* Allocate and fill in one message for every user that is getting
2323 	   events. */
2324 	list_for_each_entry(user, &(intf->users), link) {
2325 		if (! user->gets_events)
2326 			continue;
2327 
2328 		recv_msg = ipmi_alloc_recv_msg();
2329 		if (! recv_msg) {
2330 			list_for_each_entry_safe(recv_msg, recv_msg2, &msgs, link) {
2331 				list_del(&recv_msg->link);
2332 				ipmi_free_recv_msg(recv_msg);
2333 			}
2334 			/* We couldn't allocate memory for the
2335                            message, so requeue it for handling
2336                            later. */
2337 			rv = 1;
2338 			goto out;
2339 		}
2340 
2341 		deliver_count++;
2342 
2343 		copy_event_into_recv_msg(recv_msg, msg);
2344 		recv_msg->user = user;
2345 		list_add_tail(&(recv_msg->link), &msgs);
2346 	}
2347 
2348 	if (deliver_count) {
2349 		/* Now deliver all the messages. */
2350 		list_for_each_entry_safe(recv_msg, recv_msg2, &msgs, link) {
2351 			list_del(&recv_msg->link);
2352 			deliver_response(recv_msg);
2353 		}
2354 	} else if (intf->waiting_events_count < MAX_EVENTS_IN_QUEUE) {
2355 		/* No one to receive the message, put it in queue if there's
2356 		   not already too many things in the queue. */
2357 		recv_msg = ipmi_alloc_recv_msg();
2358 		if (! recv_msg) {
2359 			/* We couldn't allocate memory for the
2360                            message, so requeue it for handling
2361                            later. */
2362 			rv = 1;
2363 			goto out;
2364 		}
2365 
2366 		copy_event_into_recv_msg(recv_msg, msg);
2367 		list_add_tail(&(recv_msg->link), &(intf->waiting_events));
2368 	} else {
2369 		/* There's too many things in the queue, discard this
2370 		   message. */
2371 		printk(KERN_WARNING PFX "Event queue full, discarding an"
2372 		       " incoming event\n");
2373 	}
2374 
2375  out:
2376 	spin_unlock_irqrestore(&(intf->events_lock), flags);
2377 
2378 	return rv;
2379 }
2380 
2381 static int handle_bmc_rsp(ipmi_smi_t          intf,
2382 			  struct ipmi_smi_msg *msg)
2383 {
2384 	struct ipmi_recv_msg *recv_msg;
2385 	int                  found = 0;
2386 	struct ipmi_user     *user;
2387 	unsigned long        flags;
2388 
2389 	recv_msg = (struct ipmi_recv_msg *) msg->user_data;
2390 	if (recv_msg == NULL)
2391 	{
2392 		printk(KERN_WARNING"IPMI message received with no owner. This\n"
2393 			"could be because of a malformed message, or\n"
2394 			"because of a hardware error.  Contact your\n"
2395 			"hardware vender for assistance\n");
2396 		return 0;
2397 	}
2398 
2399 	/* Make sure the user still exists. */
2400 	list_for_each_entry(user, &(intf->users), link) {
2401 		if (user == recv_msg->user) {
2402 			/* Found it, so we can deliver it */
2403 			found = 1;
2404 			break;
2405 		}
2406 	}
2407 
2408 	if ((! found) && recv_msg->user) {
2409 		/* The user for the message went away, so give up. */
2410 		spin_lock_irqsave(&intf->counter_lock, flags);
2411 		intf->unhandled_local_responses++;
2412 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2413 		ipmi_free_recv_msg(recv_msg);
2414 	} else {
2415 		struct ipmi_system_interface_addr *smi_addr;
2416 
2417 		spin_lock_irqsave(&intf->counter_lock, flags);
2418 		intf->handled_local_responses++;
2419 		spin_unlock_irqrestore(&intf->counter_lock, flags);
2420 		recv_msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
2421 		recv_msg->msgid = msg->msgid;
2422 		smi_addr = ((struct ipmi_system_interface_addr *)
2423 			    &(recv_msg->addr));
2424 		smi_addr->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
2425 		smi_addr->channel = IPMI_BMC_CHANNEL;
2426 		smi_addr->lun = msg->rsp[0] & 3;
2427 		recv_msg->msg.netfn = msg->rsp[0] >> 2;
2428 		recv_msg->msg.cmd = msg->rsp[1];
2429 		memcpy(recv_msg->msg_data,
2430 		       &(msg->rsp[2]),
2431 		       msg->rsp_size - 2);
2432 		recv_msg->msg.data = recv_msg->msg_data;
2433 		recv_msg->msg.data_len = msg->rsp_size - 2;
2434 		deliver_response(recv_msg);
2435 	}
2436 
2437 	return 0;
2438 }
2439 
2440 /* Handle a new message.  Return 1 if the message should be requeued,
2441    0 if the message should be freed, or -1 if the message should not
2442    be freed or requeued. */
2443 static int handle_new_recv_msg(ipmi_smi_t          intf,
2444 			       struct ipmi_smi_msg *msg)
2445 {
2446 	int requeue;
2447 	int chan;
2448 
2449 #ifdef DEBUG_MSGING
2450 	int m;
2451 	printk("Recv:");
2452 	for (m = 0; m < msg->rsp_size; m++)
2453 		printk(" %2.2x", msg->rsp[m]);
2454 	printk("\n");
2455 #endif
2456 	if (msg->rsp_size < 2) {
2457 		/* Message is too small to be correct. */
2458 		printk(KERN_WARNING PFX "BMC returned to small a message"
2459 		       " for netfn %x cmd %x, got %d bytes\n",
2460 		       (msg->data[0] >> 2) | 1, msg->data[1], msg->rsp_size);
2461 
2462 		/* Generate an error response for the message. */
2463 		msg->rsp[0] = msg->data[0] | (1 << 2);
2464 		msg->rsp[1] = msg->data[1];
2465 		msg->rsp[2] = IPMI_ERR_UNSPECIFIED;
2466 		msg->rsp_size = 3;
2467 	} else if (((msg->rsp[0] >> 2) != ((msg->data[0] >> 2) | 1))/* Netfn */
2468 		   || (msg->rsp[1] != msg->data[1]))		  /* Command */
2469 	{
2470 		/* The response is not even marginally correct. */
2471 		printk(KERN_WARNING PFX "BMC returned incorrect response,"
2472 		       " expected netfn %x cmd %x, got netfn %x cmd %x\n",
2473 		       (msg->data[0] >> 2) | 1, msg->data[1],
2474 		       msg->rsp[0] >> 2, msg->rsp[1]);
2475 
2476 		/* Generate an error response for the message. */
2477 		msg->rsp[0] = msg->data[0] | (1 << 2);
2478 		msg->rsp[1] = msg->data[1];
2479 		msg->rsp[2] = IPMI_ERR_UNSPECIFIED;
2480 		msg->rsp_size = 3;
2481 	}
2482 
2483 	if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
2484 	    && (msg->rsp[1] == IPMI_SEND_MSG_CMD)
2485 	    && (msg->user_data != NULL))
2486 	{
2487 		/* It's a response to a response we sent.  For this we
2488 		   deliver a send message response to the user. */
2489 		struct ipmi_recv_msg *recv_msg = msg->user_data;
2490 
2491 		requeue = 0;
2492 		if (msg->rsp_size < 2)
2493 			/* Message is too small to be correct. */
2494 			goto out;
2495 
2496 		chan = msg->data[2] & 0x0f;
2497 		if (chan >= IPMI_MAX_CHANNELS)
2498 			/* Invalid channel number */
2499 			goto out;
2500 
2501 		if (recv_msg) {
2502 			recv_msg->recv_type = IPMI_RESPONSE_RESPONSE_TYPE;
2503 			recv_msg->msg.data = recv_msg->msg_data;
2504 			recv_msg->msg.data_len = 1;
2505 			recv_msg->msg_data[0] = msg->rsp[2];
2506 			deliver_response(recv_msg);
2507 		}
2508 	} else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
2509 		   && (msg->rsp[1] == IPMI_GET_MSG_CMD))
2510 	{
2511 		/* It's from the receive queue. */
2512 		chan = msg->rsp[3] & 0xf;
2513 		if (chan >= IPMI_MAX_CHANNELS) {
2514 			/* Invalid channel number */
2515 			requeue = 0;
2516 			goto out;
2517 		}
2518 
2519 		switch (intf->channels[chan].medium) {
2520 		case IPMI_CHANNEL_MEDIUM_IPMB:
2521 			if (msg->rsp[4] & 0x04) {
2522 				/* It's a response, so find the
2523 				   requesting message and send it up. */
2524 				requeue = handle_ipmb_get_msg_rsp(intf, msg);
2525 			} else {
2526 				/* It's a command to the SMS from some other
2527 				   entity.  Handle that. */
2528 				requeue = handle_ipmb_get_msg_cmd(intf, msg);
2529 			}
2530 			break;
2531 
2532 		case IPMI_CHANNEL_MEDIUM_8023LAN:
2533 		case IPMI_CHANNEL_MEDIUM_ASYNC:
2534 			if (msg->rsp[6] & 0x04) {
2535 				/* It's a response, so find the
2536 				   requesting message and send it up. */
2537 				requeue = handle_lan_get_msg_rsp(intf, msg);
2538 			} else {
2539 				/* It's a command to the SMS from some other
2540 				   entity.  Handle that. */
2541 				requeue = handle_lan_get_msg_cmd(intf, msg);
2542 			}
2543 			break;
2544 
2545 		default:
2546 			/* We don't handle the channel type, so just
2547 			 * free the message. */
2548 			requeue = 0;
2549 		}
2550 
2551 	} else if ((msg->rsp[0] == ((IPMI_NETFN_APP_REQUEST|1) << 2))
2552 		   && (msg->rsp[1] == IPMI_READ_EVENT_MSG_BUFFER_CMD))
2553 	{
2554 		/* It's an asyncronous event. */
2555 		requeue = handle_read_event_rsp(intf, msg);
2556 	} else {
2557 		/* It's a response from the local BMC. */
2558 		requeue = handle_bmc_rsp(intf, msg);
2559 	}
2560 
2561  out:
2562 	return requeue;
2563 }
2564 
2565 /* Handle a new message from the lower layer. */
2566 void ipmi_smi_msg_received(ipmi_smi_t          intf,
2567 			   struct ipmi_smi_msg *msg)
2568 {
2569 	unsigned long flags;
2570 	int           rv;
2571 
2572 
2573 	/* Lock the user lock so the user can't go away while we are
2574 	   working on it. */
2575 	read_lock(&(intf->users_lock));
2576 
2577 	if ((msg->data_size >= 2)
2578 	    && (msg->data[0] == (IPMI_NETFN_APP_REQUEST << 2))
2579 	    && (msg->data[1] == IPMI_SEND_MSG_CMD)
2580 	    && (msg->user_data == NULL)) {
2581 		/* This is the local response to a command send, start
2582                    the timer for these.  The user_data will not be
2583                    NULL if this is a response send, and we will let
2584                    response sends just go through. */
2585 
2586 		/* Check for errors, if we get certain errors (ones
2587                    that mean basically we can try again later), we
2588                    ignore them and start the timer.  Otherwise we
2589                    report the error immediately. */
2590 		if ((msg->rsp_size >= 3) && (msg->rsp[2] != 0)
2591 		    && (msg->rsp[2] != IPMI_NODE_BUSY_ERR)
2592 		    && (msg->rsp[2] != IPMI_LOST_ARBITRATION_ERR))
2593 		{
2594 			int chan = msg->rsp[3] & 0xf;
2595 
2596 			/* Got an error sending the message, handle it. */
2597 			spin_lock_irqsave(&intf->counter_lock, flags);
2598 			if (chan >= IPMI_MAX_CHANNELS)
2599 				; /* This shouldn't happen */
2600 			else if ((intf->channels[chan].medium
2601 				  == IPMI_CHANNEL_MEDIUM_8023LAN)
2602 				 || (intf->channels[chan].medium
2603 				     == IPMI_CHANNEL_MEDIUM_ASYNC))
2604 				intf->sent_lan_command_errs++;
2605 			else
2606 				intf->sent_ipmb_command_errs++;
2607 			spin_unlock_irqrestore(&intf->counter_lock, flags);
2608 			intf_err_seq(intf, msg->msgid, msg->rsp[2]);
2609 		} else {
2610 			/* The message was sent, start the timer. */
2611 			intf_start_seq_timer(intf, msg->msgid);
2612 		}
2613 
2614 		ipmi_free_smi_msg(msg);
2615 		goto out_unlock;
2616 	}
2617 
2618 	/* To preserve message order, if the list is not empty, we
2619            tack this message onto the end of the list. */
2620 	spin_lock_irqsave(&(intf->waiting_msgs_lock), flags);
2621 	if (!list_empty(&(intf->waiting_msgs))) {
2622 		list_add_tail(&(msg->link), &(intf->waiting_msgs));
2623 		spin_unlock(&(intf->waiting_msgs_lock));
2624 		goto out_unlock;
2625 	}
2626 	spin_unlock_irqrestore(&(intf->waiting_msgs_lock), flags);
2627 
2628 	rv = handle_new_recv_msg(intf, msg);
2629 	if (rv > 0) {
2630 		/* Could not handle the message now, just add it to a
2631                    list to handle later. */
2632 		spin_lock(&(intf->waiting_msgs_lock));
2633 		list_add_tail(&(msg->link), &(intf->waiting_msgs));
2634 		spin_unlock(&(intf->waiting_msgs_lock));
2635 	} else if (rv == 0) {
2636 		ipmi_free_smi_msg(msg);
2637 	}
2638 
2639  out_unlock:
2640 	read_unlock(&(intf->users_lock));
2641 }
2642 
2643 void ipmi_smi_watchdog_pretimeout(ipmi_smi_t intf)
2644 {
2645 	ipmi_user_t user;
2646 
2647 	read_lock(&(intf->users_lock));
2648 	list_for_each_entry(user, &(intf->users), link) {
2649 		if (! user->handler->ipmi_watchdog_pretimeout)
2650 			continue;
2651 
2652 		user->handler->ipmi_watchdog_pretimeout(user->handler_data);
2653 	}
2654 	read_unlock(&(intf->users_lock));
2655 }
2656 
2657 static void
2658 handle_msg_timeout(struct ipmi_recv_msg *msg)
2659 {
2660 	msg->recv_type = IPMI_RESPONSE_RECV_TYPE;
2661 	msg->msg_data[0] = IPMI_TIMEOUT_COMPLETION_CODE;
2662 	msg->msg.netfn |= 1; /* Convert to a response. */
2663 	msg->msg.data_len = 1;
2664 	msg->msg.data = msg->msg_data;
2665 	deliver_response(msg);
2666 }
2667 
2668 static struct ipmi_smi_msg *
2669 smi_from_recv_msg(ipmi_smi_t intf, struct ipmi_recv_msg *recv_msg,
2670 		  unsigned char seq, long seqid)
2671 {
2672 	struct ipmi_smi_msg *smi_msg = ipmi_alloc_smi_msg();
2673 	if (!smi_msg)
2674 		/* If we can't allocate the message, then just return, we
2675 		   get 4 retries, so this should be ok. */
2676 		return NULL;
2677 
2678 	memcpy(smi_msg->data, recv_msg->msg.data, recv_msg->msg.data_len);
2679 	smi_msg->data_size = recv_msg->msg.data_len;
2680 	smi_msg->msgid = STORE_SEQ_IN_MSGID(seq, seqid);
2681 
2682 #ifdef DEBUG_MSGING
2683 	{
2684 		int m;
2685 		printk("Resend: ");
2686 		for (m = 0; m < smi_msg->data_size; m++)
2687 			printk(" %2.2x", smi_msg->data[m]);
2688 		printk("\n");
2689 	}
2690 #endif
2691 	return smi_msg;
2692 }
2693 
2694 static void
2695 ipmi_timeout_handler(long timeout_period)
2696 {
2697 	ipmi_smi_t           intf;
2698 	struct list_head     timeouts;
2699 	struct ipmi_recv_msg *msg, *msg2;
2700 	struct ipmi_smi_msg  *smi_msg, *smi_msg2;
2701 	unsigned long        flags;
2702 	int                  i, j;
2703 
2704 	INIT_LIST_HEAD(&timeouts);
2705 
2706 	spin_lock(&interfaces_lock);
2707 	for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
2708 		intf = ipmi_interfaces[i];
2709 		if (intf == NULL)
2710 			continue;
2711 
2712 		read_lock(&(intf->users_lock));
2713 
2714 		/* See if any waiting messages need to be processed. */
2715 		spin_lock_irqsave(&(intf->waiting_msgs_lock), flags);
2716 		list_for_each_entry_safe(smi_msg, smi_msg2, &(intf->waiting_msgs), link) {
2717 			if (! handle_new_recv_msg(intf, smi_msg)) {
2718 				list_del(&smi_msg->link);
2719 				ipmi_free_smi_msg(smi_msg);
2720 			} else {
2721 				/* To preserve message order, quit if we
2722 				   can't handle a message. */
2723 				break;
2724 			}
2725 		}
2726 		spin_unlock_irqrestore(&(intf->waiting_msgs_lock), flags);
2727 
2728 		/* Go through the seq table and find any messages that
2729 		   have timed out, putting them in the timeouts
2730 		   list. */
2731 		spin_lock_irqsave(&(intf->seq_lock), flags);
2732 		for (j = 0; j < IPMI_IPMB_NUM_SEQ; j++) {
2733 			struct seq_table *ent = &(intf->seq_table[j]);
2734 			if (!ent->inuse)
2735 				continue;
2736 
2737 			ent->timeout -= timeout_period;
2738 			if (ent->timeout > 0)
2739 				continue;
2740 
2741 			if (ent->retries_left == 0) {
2742 				/* The message has used all its retries. */
2743 				ent->inuse = 0;
2744 				msg = ent->recv_msg;
2745 				list_add_tail(&(msg->link), &timeouts);
2746 				spin_lock(&intf->counter_lock);
2747 				if (ent->broadcast)
2748 					intf->timed_out_ipmb_broadcasts++;
2749 				else if (ent->recv_msg->addr.addr_type
2750 					 == IPMI_LAN_ADDR_TYPE)
2751 					intf->timed_out_lan_commands++;
2752 				else
2753 					intf->timed_out_ipmb_commands++;
2754 				spin_unlock(&intf->counter_lock);
2755 			} else {
2756 				struct ipmi_smi_msg *smi_msg;
2757 				/* More retries, send again. */
2758 
2759 				/* Start with the max timer, set to normal
2760 				   timer after the message is sent. */
2761 				ent->timeout = MAX_MSG_TIMEOUT;
2762 				ent->retries_left--;
2763 				spin_lock(&intf->counter_lock);
2764 				if (ent->recv_msg->addr.addr_type
2765 				    == IPMI_LAN_ADDR_TYPE)
2766 					intf->retransmitted_lan_commands++;
2767 				else
2768 					intf->retransmitted_ipmb_commands++;
2769 				spin_unlock(&intf->counter_lock);
2770 				smi_msg = smi_from_recv_msg(intf,
2771 						ent->recv_msg, j, ent->seqid);
2772 				if (! smi_msg)
2773 					continue;
2774 
2775 				spin_unlock_irqrestore(&(intf->seq_lock),flags);
2776 				/* Send the new message.  We send with a zero
2777 				 * priority.  It timed out, I doubt time is
2778 				 * that critical now, and high priority
2779 				 * messages are really only for messages to the
2780 				 * local MC, which don't get resent. */
2781 				intf->handlers->sender(intf->send_info,
2782 							smi_msg, 0);
2783 				spin_lock_irqsave(&(intf->seq_lock), flags);
2784 			}
2785 		}
2786 		spin_unlock_irqrestore(&(intf->seq_lock), flags);
2787 
2788 		list_for_each_entry_safe(msg, msg2, &timeouts, link) {
2789 			handle_msg_timeout(msg);
2790 		}
2791 
2792 		read_unlock(&(intf->users_lock));
2793 	}
2794 	spin_unlock(&interfaces_lock);
2795 }
2796 
2797 static void ipmi_request_event(void)
2798 {
2799 	ipmi_smi_t intf;
2800 	int        i;
2801 
2802 	spin_lock(&interfaces_lock);
2803 	for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
2804 		intf = ipmi_interfaces[i];
2805 		if (intf == NULL)
2806 			continue;
2807 
2808 		intf->handlers->request_events(intf->send_info);
2809 	}
2810 	spin_unlock(&interfaces_lock);
2811 }
2812 
2813 static struct timer_list ipmi_timer;
2814 
2815 /* Call every ~100 ms. */
2816 #define IPMI_TIMEOUT_TIME	100
2817 
2818 /* How many jiffies does it take to get to the timeout time. */
2819 #define IPMI_TIMEOUT_JIFFIES	((IPMI_TIMEOUT_TIME * HZ) / 1000)
2820 
2821 /* Request events from the queue every second (this is the number of
2822    IPMI_TIMEOUT_TIMES between event requests).  Hopefully, in the
2823    future, IPMI will add a way to know immediately if an event is in
2824    the queue and this silliness can go away. */
2825 #define IPMI_REQUEST_EV_TIME	(1000 / (IPMI_TIMEOUT_TIME))
2826 
2827 static atomic_t stop_operation;
2828 static unsigned int ticks_to_req_ev = IPMI_REQUEST_EV_TIME;
2829 
2830 static void ipmi_timeout(unsigned long data)
2831 {
2832 	if (atomic_read(&stop_operation))
2833 		return;
2834 
2835 	ticks_to_req_ev--;
2836 	if (ticks_to_req_ev == 0) {
2837 		ipmi_request_event();
2838 		ticks_to_req_ev = IPMI_REQUEST_EV_TIME;
2839 	}
2840 
2841 	ipmi_timeout_handler(IPMI_TIMEOUT_TIME);
2842 
2843 	mod_timer(&ipmi_timer, jiffies + IPMI_TIMEOUT_JIFFIES);
2844 }
2845 
2846 
2847 static atomic_t smi_msg_inuse_count = ATOMIC_INIT(0);
2848 static atomic_t recv_msg_inuse_count = ATOMIC_INIT(0);
2849 
2850 /* FIXME - convert these to slabs. */
2851 static void free_smi_msg(struct ipmi_smi_msg *msg)
2852 {
2853 	atomic_dec(&smi_msg_inuse_count);
2854 	kfree(msg);
2855 }
2856 
2857 struct ipmi_smi_msg *ipmi_alloc_smi_msg(void)
2858 {
2859 	struct ipmi_smi_msg *rv;
2860 	rv = kmalloc(sizeof(struct ipmi_smi_msg), GFP_ATOMIC);
2861 	if (rv) {
2862 		rv->done = free_smi_msg;
2863 		rv->user_data = NULL;
2864 		atomic_inc(&smi_msg_inuse_count);
2865 	}
2866 	return rv;
2867 }
2868 
2869 static void free_recv_msg(struct ipmi_recv_msg *msg)
2870 {
2871 	atomic_dec(&recv_msg_inuse_count);
2872 	kfree(msg);
2873 }
2874 
2875 struct ipmi_recv_msg *ipmi_alloc_recv_msg(void)
2876 {
2877 	struct ipmi_recv_msg *rv;
2878 
2879 	rv = kmalloc(sizeof(struct ipmi_recv_msg), GFP_ATOMIC);
2880 	if (rv) {
2881 		rv->done = free_recv_msg;
2882 		atomic_inc(&recv_msg_inuse_count);
2883 	}
2884 	return rv;
2885 }
2886 
2887 #ifdef CONFIG_IPMI_PANIC_EVENT
2888 
2889 static void dummy_smi_done_handler(struct ipmi_smi_msg *msg)
2890 {
2891 }
2892 
2893 static void dummy_recv_done_handler(struct ipmi_recv_msg *msg)
2894 {
2895 }
2896 
2897 #ifdef CONFIG_IPMI_PANIC_STRING
2898 static void event_receiver_fetcher(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
2899 {
2900 	if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
2901 	    && (msg->msg.netfn == IPMI_NETFN_SENSOR_EVENT_RESPONSE)
2902 	    && (msg->msg.cmd == IPMI_GET_EVENT_RECEIVER_CMD)
2903 	    && (msg->msg.data[0] == IPMI_CC_NO_ERROR))
2904 	{
2905 		/* A get event receiver command, save it. */
2906 		intf->event_receiver = msg->msg.data[1];
2907 		intf->event_receiver_lun = msg->msg.data[2] & 0x3;
2908 	}
2909 }
2910 
2911 static void device_id_fetcher(ipmi_smi_t intf, struct ipmi_recv_msg *msg)
2912 {
2913 	if ((msg->addr.addr_type == IPMI_SYSTEM_INTERFACE_ADDR_TYPE)
2914 	    && (msg->msg.netfn == IPMI_NETFN_APP_RESPONSE)
2915 	    && (msg->msg.cmd == IPMI_GET_DEVICE_ID_CMD)
2916 	    && (msg->msg.data[0] == IPMI_CC_NO_ERROR))
2917 	{
2918 		/* A get device id command, save if we are an event
2919 		   receiver or generator. */
2920 		intf->local_sel_device = (msg->msg.data[6] >> 2) & 1;
2921 		intf->local_event_generator = (msg->msg.data[6] >> 5) & 1;
2922 	}
2923 }
2924 #endif
2925 
2926 static void send_panic_events(char *str)
2927 {
2928 	struct kernel_ipmi_msg            msg;
2929 	ipmi_smi_t                        intf;
2930 	unsigned char                     data[16];
2931 	int                               i;
2932 	struct ipmi_system_interface_addr *si;
2933 	struct ipmi_addr                  addr;
2934 	struct ipmi_smi_msg               smi_msg;
2935 	struct ipmi_recv_msg              recv_msg;
2936 
2937 	si = (struct ipmi_system_interface_addr *) &addr;
2938 	si->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
2939 	si->channel = IPMI_BMC_CHANNEL;
2940 	si->lun = 0;
2941 
2942 	/* Fill in an event telling that we have failed. */
2943 	msg.netfn = 0x04; /* Sensor or Event. */
2944 	msg.cmd = 2; /* Platform event command. */
2945 	msg.data = data;
2946 	msg.data_len = 8;
2947 	data[0] = 0x21; /* Kernel generator ID, IPMI table 5-4 */
2948 	data[1] = 0x03; /* This is for IPMI 1.0. */
2949 	data[2] = 0x20; /* OS Critical Stop, IPMI table 36-3 */
2950 	data[4] = 0x6f; /* Sensor specific, IPMI table 36-1 */
2951 	data[5] = 0xa1; /* Runtime stop OEM bytes 2 & 3. */
2952 
2953 	/* Put a few breadcrumbs in.  Hopefully later we can add more things
2954 	   to make the panic events more useful. */
2955 	if (str) {
2956 		data[3] = str[0];
2957 		data[6] = str[1];
2958 		data[7] = str[2];
2959 	}
2960 
2961 	smi_msg.done = dummy_smi_done_handler;
2962 	recv_msg.done = dummy_recv_done_handler;
2963 
2964 	/* For every registered interface, send the event. */
2965 	for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
2966 		intf = ipmi_interfaces[i];
2967 		if (intf == NULL)
2968 			continue;
2969 
2970 		/* Send the event announcing the panic. */
2971 		intf->handlers->set_run_to_completion(intf->send_info, 1);
2972 		i_ipmi_request(NULL,
2973 			       intf,
2974 			       &addr,
2975 			       0,
2976 			       &msg,
2977 			       intf,
2978 			       &smi_msg,
2979 			       &recv_msg,
2980 			       0,
2981 			       intf->channels[0].address,
2982 			       intf->channels[0].lun,
2983 			       0, 1); /* Don't retry, and don't wait. */
2984 	}
2985 
2986 #ifdef CONFIG_IPMI_PANIC_STRING
2987 	/* On every interface, dump a bunch of OEM event holding the
2988 	   string. */
2989 	if (!str)
2990 		return;
2991 
2992 	for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
2993 		char                  *p = str;
2994 		struct ipmi_ipmb_addr *ipmb;
2995 		int                   j;
2996 
2997 		intf = ipmi_interfaces[i];
2998 		if (intf == NULL)
2999 			continue;
3000 
3001 		/* First job here is to figure out where to send the
3002 		   OEM events.  There's no way in IPMI to send OEM
3003 		   events using an event send command, so we have to
3004 		   find the SEL to put them in and stick them in
3005 		   there. */
3006 
3007 		/* Get capabilities from the get device id. */
3008 		intf->local_sel_device = 0;
3009 		intf->local_event_generator = 0;
3010 		intf->event_receiver = 0;
3011 
3012 		/* Request the device info from the local MC. */
3013 		msg.netfn = IPMI_NETFN_APP_REQUEST;
3014 		msg.cmd = IPMI_GET_DEVICE_ID_CMD;
3015 		msg.data = NULL;
3016 		msg.data_len = 0;
3017 		intf->null_user_handler = device_id_fetcher;
3018 		i_ipmi_request(NULL,
3019 			       intf,
3020 			       &addr,
3021 			       0,
3022 			       &msg,
3023 			       intf,
3024 			       &smi_msg,
3025 			       &recv_msg,
3026 			       0,
3027 			       intf->channels[0].address,
3028 			       intf->channels[0].lun,
3029 			       0, 1); /* Don't retry, and don't wait. */
3030 
3031 		if (intf->local_event_generator) {
3032 			/* Request the event receiver from the local MC. */
3033 			msg.netfn = IPMI_NETFN_SENSOR_EVENT_REQUEST;
3034 			msg.cmd = IPMI_GET_EVENT_RECEIVER_CMD;
3035 			msg.data = NULL;
3036 			msg.data_len = 0;
3037 			intf->null_user_handler = event_receiver_fetcher;
3038 			i_ipmi_request(NULL,
3039 				       intf,
3040 				       &addr,
3041 				       0,
3042 				       &msg,
3043 				       intf,
3044 				       &smi_msg,
3045 				       &recv_msg,
3046 				       0,
3047 				       intf->channels[0].address,
3048 				       intf->channels[0].lun,
3049 				       0, 1); /* no retry, and no wait. */
3050 		}
3051 		intf->null_user_handler = NULL;
3052 
3053 		/* Validate the event receiver.  The low bit must not
3054 		   be 1 (it must be a valid IPMB address), it cannot
3055 		   be zero, and it must not be my address. */
3056                 if (((intf->event_receiver & 1) == 0)
3057 		    && (intf->event_receiver != 0)
3058 		    && (intf->event_receiver != intf->channels[0].address))
3059 		{
3060 			/* The event receiver is valid, send an IPMB
3061 			   message. */
3062 			ipmb = (struct ipmi_ipmb_addr *) &addr;
3063 			ipmb->addr_type = IPMI_IPMB_ADDR_TYPE;
3064 			ipmb->channel = 0; /* FIXME - is this right? */
3065 			ipmb->lun = intf->event_receiver_lun;
3066 			ipmb->slave_addr = intf->event_receiver;
3067 		} else if (intf->local_sel_device) {
3068 			/* The event receiver was not valid (or was
3069 			   me), but I am an SEL device, just dump it
3070 			   in my SEL. */
3071 			si = (struct ipmi_system_interface_addr *) &addr;
3072 			si->addr_type = IPMI_SYSTEM_INTERFACE_ADDR_TYPE;
3073 			si->channel = IPMI_BMC_CHANNEL;
3074 			si->lun = 0;
3075 		} else
3076 			continue; /* No where to send the event. */
3077 
3078 
3079 		msg.netfn = IPMI_NETFN_STORAGE_REQUEST; /* Storage. */
3080 		msg.cmd = IPMI_ADD_SEL_ENTRY_CMD;
3081 		msg.data = data;
3082 		msg.data_len = 16;
3083 
3084 		j = 0;
3085 		while (*p) {
3086 			int size = strlen(p);
3087 
3088 			if (size > 11)
3089 				size = 11;
3090 			data[0] = 0;
3091 			data[1] = 0;
3092 			data[2] = 0xf0; /* OEM event without timestamp. */
3093 			data[3] = intf->channels[0].address;
3094 			data[4] = j++; /* sequence # */
3095 			/* Always give 11 bytes, so strncpy will fill
3096 			   it with zeroes for me. */
3097 			strncpy(data+5, p, 11);
3098 			p += size;
3099 
3100 			i_ipmi_request(NULL,
3101 				       intf,
3102 				       &addr,
3103 				       0,
3104 				       &msg,
3105 				       intf,
3106 				       &smi_msg,
3107 				       &recv_msg,
3108 				       0,
3109 				       intf->channels[0].address,
3110 				       intf->channels[0].lun,
3111 				       0, 1); /* no retry, and no wait. */
3112 		}
3113 	}
3114 #endif /* CONFIG_IPMI_PANIC_STRING */
3115 }
3116 #endif /* CONFIG_IPMI_PANIC_EVENT */
3117 
3118 static int has_paniced = 0;
3119 
3120 static int panic_event(struct notifier_block *this,
3121 		       unsigned long         event,
3122                        void                  *ptr)
3123 {
3124 	int        i;
3125 	ipmi_smi_t intf;
3126 
3127 	if (has_paniced)
3128 		return NOTIFY_DONE;
3129 	has_paniced = 1;
3130 
3131 	/* For every registered interface, set it to run to completion. */
3132 	for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
3133 		intf = ipmi_interfaces[i];
3134 		if (intf == NULL)
3135 			continue;
3136 
3137 		intf->handlers->set_run_to_completion(intf->send_info, 1);
3138 	}
3139 
3140 #ifdef CONFIG_IPMI_PANIC_EVENT
3141 	send_panic_events(ptr);
3142 #endif
3143 
3144 	return NOTIFY_DONE;
3145 }
3146 
3147 static struct notifier_block panic_block = {
3148 	.notifier_call	= panic_event,
3149 	.next		= NULL,
3150 	.priority	= 200	/* priority: INT_MAX >= x >= 0 */
3151 };
3152 
3153 static int ipmi_init_msghandler(void)
3154 {
3155 	int i;
3156 
3157 	if (initialized)
3158 		return 0;
3159 
3160 	printk(KERN_INFO "ipmi message handler version "
3161 	       IPMI_DRIVER_VERSION "\n");
3162 
3163 	for (i = 0; i < MAX_IPMI_INTERFACES; i++) {
3164 		ipmi_interfaces[i] = NULL;
3165 	}
3166 
3167 #ifdef CONFIG_PROC_FS
3168 	proc_ipmi_root = proc_mkdir("ipmi", NULL);
3169 	if (!proc_ipmi_root) {
3170 	    printk(KERN_ERR PFX "Unable to create IPMI proc dir");
3171 	    return -ENOMEM;
3172 	}
3173 
3174 	proc_ipmi_root->owner = THIS_MODULE;
3175 #endif /* CONFIG_PROC_FS */
3176 
3177 	init_timer(&ipmi_timer);
3178 	ipmi_timer.data = 0;
3179 	ipmi_timer.function = ipmi_timeout;
3180 	ipmi_timer.expires = jiffies + IPMI_TIMEOUT_JIFFIES;
3181 	add_timer(&ipmi_timer);
3182 
3183 	notifier_chain_register(&panic_notifier_list, &panic_block);
3184 
3185 	initialized = 1;
3186 
3187 	return 0;
3188 }
3189 
3190 static __init int ipmi_init_msghandler_mod(void)
3191 {
3192 	ipmi_init_msghandler();
3193 	return 0;
3194 }
3195 
3196 static __exit void cleanup_ipmi(void)
3197 {
3198 	int count;
3199 
3200 	if (!initialized)
3201 		return;
3202 
3203 	notifier_chain_unregister(&panic_notifier_list, &panic_block);
3204 
3205 	/* This can't be called if any interfaces exist, so no worry about
3206 	   shutting down the interfaces. */
3207 
3208 	/* Tell the timer to stop, then wait for it to stop.  This avoids
3209 	   problems with race conditions removing the timer here. */
3210 	atomic_inc(&stop_operation);
3211 	del_timer_sync(&ipmi_timer);
3212 
3213 #ifdef CONFIG_PROC_FS
3214 	remove_proc_entry(proc_ipmi_root->name, &proc_root);
3215 #endif /* CONFIG_PROC_FS */
3216 
3217 	initialized = 0;
3218 
3219 	/* Check for buffer leaks. */
3220 	count = atomic_read(&smi_msg_inuse_count);
3221 	if (count != 0)
3222 		printk(KERN_WARNING PFX "SMI message count %d at exit\n",
3223 		       count);
3224 	count = atomic_read(&recv_msg_inuse_count);
3225 	if (count != 0)
3226 		printk(KERN_WARNING PFX "recv message count %d at exit\n",
3227 		       count);
3228 }
3229 module_exit(cleanup_ipmi);
3230 
3231 module_init(ipmi_init_msghandler_mod);
3232 MODULE_LICENSE("GPL");
3233 MODULE_AUTHOR("Corey Minyard <minyard@mvista.com>");
3234 MODULE_DESCRIPTION("Incoming and outgoing message routing for an IPMI interface.");
3235 MODULE_VERSION(IPMI_DRIVER_VERSION);
3236 
3237 EXPORT_SYMBOL(ipmi_create_user);
3238 EXPORT_SYMBOL(ipmi_destroy_user);
3239 EXPORT_SYMBOL(ipmi_get_version);
3240 EXPORT_SYMBOL(ipmi_request_settime);
3241 EXPORT_SYMBOL(ipmi_request_supply_msgs);
3242 EXPORT_SYMBOL(ipmi_register_smi);
3243 EXPORT_SYMBOL(ipmi_unregister_smi);
3244 EXPORT_SYMBOL(ipmi_register_for_cmd);
3245 EXPORT_SYMBOL(ipmi_unregister_for_cmd);
3246 EXPORT_SYMBOL(ipmi_smi_msg_received);
3247 EXPORT_SYMBOL(ipmi_smi_watchdog_pretimeout);
3248 EXPORT_SYMBOL(ipmi_alloc_smi_msg);
3249 EXPORT_SYMBOL(ipmi_addr_length);
3250 EXPORT_SYMBOL(ipmi_validate_addr);
3251 EXPORT_SYMBOL(ipmi_set_gets_events);
3252 EXPORT_SYMBOL(ipmi_smi_watcher_register);
3253 EXPORT_SYMBOL(ipmi_smi_watcher_unregister);
3254 EXPORT_SYMBOL(ipmi_set_my_address);
3255 EXPORT_SYMBOL(ipmi_get_my_address);
3256 EXPORT_SYMBOL(ipmi_set_my_LUN);
3257 EXPORT_SYMBOL(ipmi_get_my_LUN);
3258 EXPORT_SYMBOL(ipmi_smi_add_proc_entry);
3259 EXPORT_SYMBOL(proc_ipmi_root);
3260 EXPORT_SYMBOL(ipmi_user_set_run_to_completion);
3261