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