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