linux/drivers/char/ipmi/ipmi_ssif.c
<<
>>
Prefs
   1/*
   2 * ipmi_ssif.c
   3 *
   4 * The interface to the IPMI driver for SMBus access to a SMBus
   5 * compliant device.  Called SSIF by the IPMI spec.
   6 *
   7 * Author: Intel Corporation
   8 *         Todd Davis <todd.c.davis@intel.com>
   9 *
  10 * Rewritten by Corey Minyard <minyard@acm.org> to support the
  11 * non-blocking I2C interface, add support for multi-part
  12 * transactions, add PEC support, and general clenaup.
  13 *
  14 * Copyright 2003 Intel Corporation
  15 * Copyright 2005 MontaVista Software
  16 *
  17 *  This program is free software; you can redistribute it and/or modify it
  18 *  under the terms of the GNU General Public License as published by the
  19 *  Free Software Foundation; either version 2 of the License, or (at your
  20 *  option) any later version.
  21 */
  22
  23/*
  24 * This file holds the "policy" for the interface to the SSIF state
  25 * machine.  It does the configuration, handles timers and interrupts,
  26 * and drives the real SSIF state machine.
  27 */
  28
  29/*
  30 * TODO: Figure out how to use SMB alerts.  This will require a new
  31 * interface into the I2C driver, I believe.
  32 */
  33
  34#if defined(MODVERSIONS)
  35#include <linux/modversions.h>
  36#endif
  37
  38#include <linux/module.h>
  39#include <linux/moduleparam.h>
  40#include <linux/sched.h>
  41#include <linux/seq_file.h>
  42#include <linux/timer.h>
  43#include <linux/delay.h>
  44#include <linux/errno.h>
  45#include <linux/spinlock.h>
  46#include <linux/slab.h>
  47#include <linux/list.h>
  48#include <linux/i2c.h>
  49#include <linux/ipmi_smi.h>
  50#include <linux/init.h>
  51#include <linux/dmi.h>
  52#include <linux/kthread.h>
  53#include <linux/acpi.h>
  54#include <linux/ctype.h>
  55#include <linux/time64.h>
  56
  57#define PFX "ipmi_ssif: "
  58#define DEVICE_NAME "ipmi_ssif"
  59
  60#define IPMI_GET_SYSTEM_INTERFACE_CAPABILITIES_CMD      0x57
  61
  62#define SSIF_IPMI_REQUEST                       2
  63#define SSIF_IPMI_MULTI_PART_REQUEST_START      6
  64#define SSIF_IPMI_MULTI_PART_REQUEST_MIDDLE     7
  65#define SSIF_IPMI_RESPONSE                      3
  66#define SSIF_IPMI_MULTI_PART_RESPONSE_MIDDLE    9
  67
  68/* ssif_debug is a bit-field
  69 *      SSIF_DEBUG_MSG -        commands and their responses
  70 *      SSIF_DEBUG_STATES -     message states
  71 *      SSIF_DEBUG_TIMING -      Measure times between events in the driver
  72 */
  73#define SSIF_DEBUG_TIMING       4
  74#define SSIF_DEBUG_STATE        2
  75#define SSIF_DEBUG_MSG          1
  76#define SSIF_NODEBUG            0
  77#define SSIF_DEFAULT_DEBUG      (SSIF_NODEBUG)
  78
  79/*
  80 * Timer values
  81 */
  82#define SSIF_MSG_USEC           20000   /* 20ms between message tries. */
  83#define SSIF_MSG_PART_USEC      5000    /* 5ms for a message part */
  84
  85/* How many times to we retry sending/receiving the message. */
  86#define SSIF_SEND_RETRIES       5
  87#define SSIF_RECV_RETRIES       250
  88
  89#define SSIF_MSG_MSEC           (SSIF_MSG_USEC / 1000)
  90#define SSIF_MSG_JIFFIES        ((SSIF_MSG_USEC * 1000) / TICK_NSEC)
  91#define SSIF_MSG_PART_JIFFIES   ((SSIF_MSG_PART_USEC * 1000) / TICK_NSEC)
  92
  93enum ssif_intf_state {
  94        SSIF_NORMAL,
  95        SSIF_GETTING_FLAGS,
  96        SSIF_GETTING_EVENTS,
  97        SSIF_CLEARING_FLAGS,
  98        SSIF_GETTING_MESSAGES,
  99        /* FIXME - add watchdog stuff. */
 100};
 101
 102#define SSIF_IDLE(ssif)  ((ssif)->ssif_state == SSIF_NORMAL \
 103                          && (ssif)->curr_msg == NULL)
 104
 105/*
 106 * Indexes into stats[] in ssif_info below.
 107 */
 108enum ssif_stat_indexes {
 109        /* Number of total messages sent. */
 110        SSIF_STAT_sent_messages = 0,
 111
 112        /*
 113         * Number of message parts sent.  Messages may be broken into
 114         * parts if they are long.
 115         */
 116        SSIF_STAT_sent_messages_parts,
 117
 118        /*
 119         * Number of time a message was retried.
 120         */
 121        SSIF_STAT_send_retries,
 122
 123        /*
 124         * Number of times the send of a message failed.
 125         */
 126        SSIF_STAT_send_errors,
 127
 128        /*
 129         * Number of message responses received.
 130         */
 131        SSIF_STAT_received_messages,
 132
 133        /*
 134         * Number of message fragments received.
 135         */
 136        SSIF_STAT_received_message_parts,
 137
 138        /*
 139         * Number of times the receive of a message was retried.
 140         */
 141        SSIF_STAT_receive_retries,
 142
 143        /*
 144         * Number of errors receiving messages.
 145         */
 146        SSIF_STAT_receive_errors,
 147
 148        /*
 149         * Number of times a flag fetch was requested.
 150         */
 151        SSIF_STAT_flag_fetches,
 152
 153        /*
 154         * Number of times the hardware didn't follow the state machine.
 155         */
 156        SSIF_STAT_hosed,
 157
 158        /*
 159         * Number of received events.
 160         */
 161        SSIF_STAT_events,
 162
 163        /* Number of asyncronous messages received. */
 164        SSIF_STAT_incoming_messages,
 165
 166        /* Number of watchdog pretimeouts. */
 167        SSIF_STAT_watchdog_pretimeouts,
 168
 169        /* Number of alers received. */
 170        SSIF_STAT_alerts,
 171
 172        /* Always add statistics before this value, it must be last. */
 173        SSIF_NUM_STATS
 174};
 175
 176struct ssif_addr_info {
 177        unsigned short addr;
 178        struct i2c_board_info binfo;
 179        char *adapter_name;
 180        int debug;
 181        int slave_addr;
 182        enum ipmi_addr_src addr_src;
 183        union ipmi_smi_info_union addr_info;
 184
 185        struct mutex clients_mutex;
 186        struct list_head clients;
 187
 188        struct list_head link;
 189};
 190
 191struct ssif_info;
 192
 193typedef void (*ssif_i2c_done)(struct ssif_info *ssif_info, int result,
 194                             unsigned char *data, unsigned int len);
 195
 196struct ssif_info {
 197        ipmi_smi_t          intf;
 198        int                 intf_num;
 199        spinlock_t          lock;
 200        struct ipmi_smi_msg *waiting_msg;
 201        struct ipmi_smi_msg *curr_msg;
 202        enum ssif_intf_state ssif_state;
 203        unsigned long       ssif_debug;
 204
 205        struct ipmi_smi_handlers handlers;
 206
 207        enum ipmi_addr_src addr_source; /* ACPI, PCI, SMBIOS, hardcode, etc. */
 208        union ipmi_smi_info_union addr_info;
 209
 210        /*
 211         * Flags from the last GET_MSG_FLAGS command, used when an ATTN
 212         * is set to hold the flags until we are done handling everything
 213         * from the flags.
 214         */
 215#define RECEIVE_MSG_AVAIL       0x01
 216#define EVENT_MSG_BUFFER_FULL   0x02
 217#define WDT_PRE_TIMEOUT_INT     0x08
 218        unsigned char       msg_flags;
 219
 220        u8                  global_enables;
 221        bool                has_event_buffer;
 222        bool                supports_alert;
 223
 224        /*
 225         * Used to tell what we should do with alerts.  If we are
 226         * waiting on a response, read the data immediately.
 227         */
 228        bool                got_alert;
 229        bool                waiting_alert;
 230
 231        /*
 232         * If set to true, this will request events the next time the
 233         * state machine is idle.
 234         */
 235        bool                req_events;
 236
 237        /*
 238         * If set to true, this will request flags the next time the
 239         * state machine is idle.
 240         */
 241        bool                req_flags;
 242
 243        /*
 244         * Used to perform timer operations when run-to-completion
 245         * mode is on.  This is a countdown timer.
 246         */
 247        int                 rtc_us_timer;
 248
 249        /* Used for sending/receiving data.  +1 for the length. */
 250        unsigned char data[IPMI_MAX_MSG_LENGTH + 1];
 251        unsigned int  data_len;
 252
 253        /* Temp receive buffer, gets copied into data. */
 254        unsigned char recv[I2C_SMBUS_BLOCK_MAX];
 255
 256        struct i2c_client *client;
 257        ssif_i2c_done done_handler;
 258
 259        /* Thread interface handling */
 260        struct task_struct *thread;
 261        struct completion wake_thread;
 262        bool stopping;
 263        int i2c_read_write;
 264        int i2c_command;
 265        unsigned char *i2c_data;
 266        unsigned int i2c_size;
 267
 268        /* From the device id response. */
 269        struct ipmi_device_id device_id;
 270
 271        struct timer_list retry_timer;
 272        int retries_left;
 273
 274        /* Info from SSIF cmd */
 275        unsigned char max_xmit_msg_size;
 276        unsigned char max_recv_msg_size;
 277        unsigned int  multi_support;
 278        int           supports_pec;
 279
 280#define SSIF_NO_MULTI           0
 281#define SSIF_MULTI_2_PART       1
 282#define SSIF_MULTI_n_PART       2
 283        unsigned char *multi_data;
 284        unsigned int  multi_len;
 285        unsigned int  multi_pos;
 286
 287        atomic_t stats[SSIF_NUM_STATS];
 288};
 289
 290#define ssif_inc_stat(ssif, stat) \
 291        atomic_inc(&(ssif)->stats[SSIF_STAT_ ## stat])
 292#define ssif_get_stat(ssif, stat) \
 293        ((unsigned int) atomic_read(&(ssif)->stats[SSIF_STAT_ ## stat]))
 294
 295static bool initialized;
 296
 297static atomic_t next_intf = ATOMIC_INIT(0);
 298
 299static void return_hosed_msg(struct ssif_info *ssif_info,
 300                             struct ipmi_smi_msg *msg);
 301static void start_next_msg(struct ssif_info *ssif_info, unsigned long *flags);
 302static int start_send(struct ssif_info *ssif_info,
 303                      unsigned char   *data,
 304                      unsigned int    len);
 305
 306static unsigned long *ipmi_ssif_lock_cond(struct ssif_info *ssif_info,
 307                                          unsigned long *flags)
 308{
 309        spin_lock_irqsave(&ssif_info->lock, *flags);
 310        return flags;
 311}
 312
 313static void ipmi_ssif_unlock_cond(struct ssif_info *ssif_info,
 314                                  unsigned long *flags)
 315{
 316        spin_unlock_irqrestore(&ssif_info->lock, *flags);
 317}
 318
 319static void deliver_recv_msg(struct ssif_info *ssif_info,
 320                             struct ipmi_smi_msg *msg)
 321{
 322        ipmi_smi_t    intf = ssif_info->intf;
 323
 324        if (!intf) {
 325                ipmi_free_smi_msg(msg);
 326        } else if (msg->rsp_size < 0) {
 327                return_hosed_msg(ssif_info, msg);
 328                pr_err(PFX
 329                       "Malformed message in deliver_recv_msg: rsp_size = %d\n",
 330                       msg->rsp_size);
 331        } else {
 332                ipmi_smi_msg_received(intf, msg);
 333        }
 334}
 335
 336static void return_hosed_msg(struct ssif_info *ssif_info,
 337                             struct ipmi_smi_msg *msg)
 338{
 339        ssif_inc_stat(ssif_info, hosed);
 340
 341        /* Make it a response */
 342        msg->rsp[0] = msg->data[0] | 4;
 343        msg->rsp[1] = msg->data[1];
 344        msg->rsp[2] = 0xFF; /* Unknown error. */
 345        msg->rsp_size = 3;
 346
 347        deliver_recv_msg(ssif_info, msg);
 348}
 349
 350/*
 351 * Must be called with the message lock held.  This will release the
 352 * message lock.  Note that the caller will check SSIF_IDLE and start a
 353 * new operation, so there is no need to check for new messages to
 354 * start in here.
 355 */
 356static void start_clear_flags(struct ssif_info *ssif_info, unsigned long *flags)
 357{
 358        unsigned char msg[3];
 359
 360        ssif_info->msg_flags &= ~WDT_PRE_TIMEOUT_INT;
 361        ssif_info->ssif_state = SSIF_CLEARING_FLAGS;
 362        ipmi_ssif_unlock_cond(ssif_info, flags);
 363
 364        /* Make sure the watchdog pre-timeout flag is not set at startup. */
 365        msg[0] = (IPMI_NETFN_APP_REQUEST << 2);
 366        msg[1] = IPMI_CLEAR_MSG_FLAGS_CMD;
 367        msg[2] = WDT_PRE_TIMEOUT_INT;
 368
 369        if (start_send(ssif_info, msg, 3) != 0) {
 370                /* Error, just go to normal state. */
 371                ssif_info->ssif_state = SSIF_NORMAL;
 372        }
 373}
 374
 375static void start_flag_fetch(struct ssif_info *ssif_info, unsigned long *flags)
 376{
 377        unsigned char mb[2];
 378
 379        ssif_info->req_flags = false;
 380        ssif_info->ssif_state = SSIF_GETTING_FLAGS;
 381        ipmi_ssif_unlock_cond(ssif_info, flags);
 382
 383        mb[0] = (IPMI_NETFN_APP_REQUEST << 2);
 384        mb[1] = IPMI_GET_MSG_FLAGS_CMD;
 385        if (start_send(ssif_info, mb, 2) != 0)
 386                ssif_info->ssif_state = SSIF_NORMAL;
 387}
 388
 389static void check_start_send(struct ssif_info *ssif_info, unsigned long *flags,
 390                             struct ipmi_smi_msg *msg)
 391{
 392        if (start_send(ssif_info, msg->data, msg->data_size) != 0) {
 393                unsigned long oflags;
 394
 395                flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
 396                ssif_info->curr_msg = NULL;
 397                ssif_info->ssif_state = SSIF_NORMAL;
 398                ipmi_ssif_unlock_cond(ssif_info, flags);
 399                ipmi_free_smi_msg(msg);
 400        }
 401}
 402
 403static void start_event_fetch(struct ssif_info *ssif_info, unsigned long *flags)
 404{
 405        struct ipmi_smi_msg *msg;
 406
 407        ssif_info->req_events = false;
 408
 409        msg = ipmi_alloc_smi_msg();
 410        if (!msg) {
 411                ssif_info->ssif_state = SSIF_NORMAL;
 412                return;
 413        }
 414
 415        ssif_info->curr_msg = msg;
 416        ssif_info->ssif_state = SSIF_GETTING_EVENTS;
 417        ipmi_ssif_unlock_cond(ssif_info, flags);
 418
 419        msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
 420        msg->data[1] = IPMI_READ_EVENT_MSG_BUFFER_CMD;
 421        msg->data_size = 2;
 422
 423        check_start_send(ssif_info, flags, msg);
 424}
 425
 426static void start_recv_msg_fetch(struct ssif_info *ssif_info,
 427                                 unsigned long *flags)
 428{
 429        struct ipmi_smi_msg *msg;
 430
 431        msg = ipmi_alloc_smi_msg();
 432        if (!msg) {
 433                ssif_info->ssif_state = SSIF_NORMAL;
 434                return;
 435        }
 436
 437        ssif_info->curr_msg = msg;
 438        ssif_info->ssif_state = SSIF_GETTING_MESSAGES;
 439        ipmi_ssif_unlock_cond(ssif_info, flags);
 440
 441        msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2);
 442        msg->data[1] = IPMI_GET_MSG_CMD;
 443        msg->data_size = 2;
 444
 445        check_start_send(ssif_info, flags, msg);
 446}
 447
 448/*
 449 * Must be called with the message lock held.  This will release the
 450 * message lock.  Note that the caller will check SSIF_IDLE and start a
 451 * new operation, so there is no need to check for new messages to
 452 * start in here.
 453 */
 454static void handle_flags(struct ssif_info *ssif_info, unsigned long *flags)
 455{
 456        if (ssif_info->msg_flags & WDT_PRE_TIMEOUT_INT) {
 457                ipmi_smi_t intf = ssif_info->intf;
 458                /* Watchdog pre-timeout */
 459                ssif_inc_stat(ssif_info, watchdog_pretimeouts);
 460                start_clear_flags(ssif_info, flags);
 461                if (intf)
 462                        ipmi_smi_watchdog_pretimeout(intf);
 463        } else if (ssif_info->msg_flags & RECEIVE_MSG_AVAIL)
 464                /* Messages available. */
 465                start_recv_msg_fetch(ssif_info, flags);
 466        else if (ssif_info->msg_flags & EVENT_MSG_BUFFER_FULL)
 467                /* Events available. */
 468                start_event_fetch(ssif_info, flags);
 469        else {
 470                ssif_info->ssif_state = SSIF_NORMAL;
 471                ipmi_ssif_unlock_cond(ssif_info, flags);
 472        }
 473}
 474
 475static int ipmi_ssif_thread(void *data)
 476{
 477        struct ssif_info *ssif_info = data;
 478
 479        while (!kthread_should_stop()) {
 480                int result;
 481
 482                /* Wait for something to do */
 483                result = wait_for_completion_interruptible(
 484                                                &ssif_info->wake_thread);
 485                if (ssif_info->stopping)
 486                        break;
 487                if (result == -ERESTARTSYS)
 488                        continue;
 489                init_completion(&ssif_info->wake_thread);
 490
 491                if (ssif_info->i2c_read_write == I2C_SMBUS_WRITE) {
 492                        result = i2c_smbus_write_block_data(
 493                                ssif_info->client, ssif_info->i2c_command,
 494                                ssif_info->i2c_data[0],
 495                                ssif_info->i2c_data + 1);
 496                        ssif_info->done_handler(ssif_info, result, NULL, 0);
 497                } else {
 498                        result = i2c_smbus_read_block_data(
 499                                ssif_info->client, ssif_info->i2c_command,
 500                                ssif_info->i2c_data);
 501                        if (result < 0)
 502                                ssif_info->done_handler(ssif_info, result,
 503                                                        NULL, 0);
 504                        else
 505                                ssif_info->done_handler(ssif_info, 0,
 506                                                        ssif_info->i2c_data,
 507                                                        result);
 508                }
 509        }
 510
 511        return 0;
 512}
 513
 514static int ssif_i2c_send(struct ssif_info *ssif_info,
 515                        ssif_i2c_done handler,
 516                        int read_write, int command,
 517                        unsigned char *data, unsigned int size)
 518{
 519        ssif_info->done_handler = handler;
 520
 521        ssif_info->i2c_read_write = read_write;
 522        ssif_info->i2c_command = command;
 523        ssif_info->i2c_data = data;
 524        ssif_info->i2c_size = size;
 525        complete(&ssif_info->wake_thread);
 526        return 0;
 527}
 528
 529
 530static void msg_done_handler(struct ssif_info *ssif_info, int result,
 531                             unsigned char *data, unsigned int len);
 532
 533static void start_get(struct ssif_info *ssif_info)
 534{
 535        int rv;
 536
 537        ssif_info->rtc_us_timer = 0;
 538        ssif_info->multi_pos = 0;
 539
 540        rv = ssif_i2c_send(ssif_info, msg_done_handler, I2C_SMBUS_READ,
 541                          SSIF_IPMI_RESPONSE,
 542                          ssif_info->recv, I2C_SMBUS_BLOCK_DATA);
 543        if (rv < 0) {
 544                /* request failed, just return the error. */
 545                if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
 546                        pr_info("Error from i2c_non_blocking_op(5)\n");
 547
 548                msg_done_handler(ssif_info, -EIO, NULL, 0);
 549        }
 550}
 551
 552static void retry_timeout(unsigned long data)
 553{
 554        struct ssif_info *ssif_info = (void *) data;
 555        unsigned long oflags, *flags;
 556        bool waiting;
 557
 558        if (ssif_info->stopping)
 559                return;
 560
 561        flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
 562        waiting = ssif_info->waiting_alert;
 563        ssif_info->waiting_alert = false;
 564        ipmi_ssif_unlock_cond(ssif_info, flags);
 565
 566        if (waiting)
 567                start_get(ssif_info);
 568}
 569
 570
 571static void ssif_alert(struct i2c_client *client, unsigned int data)
 572{
 573        struct ssif_info *ssif_info = i2c_get_clientdata(client);
 574        unsigned long oflags, *flags;
 575        bool do_get = false;
 576
 577        ssif_inc_stat(ssif_info, alerts);
 578
 579        flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
 580        if (ssif_info->waiting_alert) {
 581                ssif_info->waiting_alert = false;
 582                del_timer(&ssif_info->retry_timer);
 583                do_get = true;
 584        } else if (ssif_info->curr_msg) {
 585                ssif_info->got_alert = true;
 586        }
 587        ipmi_ssif_unlock_cond(ssif_info, flags);
 588        if (do_get)
 589                start_get(ssif_info);
 590}
 591
 592static int start_resend(struct ssif_info *ssif_info);
 593
 594static void msg_done_handler(struct ssif_info *ssif_info, int result,
 595                             unsigned char *data, unsigned int len)
 596{
 597        struct ipmi_smi_msg *msg;
 598        unsigned long oflags, *flags;
 599        int rv;
 600
 601        /*
 602         * We are single-threaded here, so no need for a lock until we
 603         * start messing with driver states or the queues.
 604         */
 605
 606        if (result < 0) {
 607                ssif_info->retries_left--;
 608                if (ssif_info->retries_left > 0) {
 609                        ssif_inc_stat(ssif_info, receive_retries);
 610
 611                        flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
 612                        ssif_info->waiting_alert = true;
 613                        ssif_info->rtc_us_timer = SSIF_MSG_USEC;
 614                        mod_timer(&ssif_info->retry_timer,
 615                                  jiffies + SSIF_MSG_JIFFIES);
 616                        ipmi_ssif_unlock_cond(ssif_info, flags);
 617                        return;
 618                }
 619
 620                ssif_inc_stat(ssif_info, receive_errors);
 621
 622                if  (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
 623                        pr_info("Error in msg_done_handler: %d\n", result);
 624                len = 0;
 625                goto continue_op;
 626        }
 627
 628        if ((len > 1) && (ssif_info->multi_pos == 0)
 629                                && (data[0] == 0x00) && (data[1] == 0x01)) {
 630                /* Start of multi-part read.  Start the next transaction. */
 631                int i;
 632
 633                ssif_inc_stat(ssif_info, received_message_parts);
 634
 635                /* Remove the multi-part read marker. */
 636                len -= 2;
 637                for (i = 0; i < len; i++)
 638                        ssif_info->data[i] = data[i+2];
 639                ssif_info->multi_len = len;
 640                ssif_info->multi_pos = 1;
 641
 642                rv = ssif_i2c_send(ssif_info, msg_done_handler, I2C_SMBUS_READ,
 643                                  SSIF_IPMI_MULTI_PART_RESPONSE_MIDDLE,
 644                                  ssif_info->recv, I2C_SMBUS_BLOCK_DATA);
 645                if (rv < 0) {
 646                        if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
 647                                pr_info("Error from i2c_non_blocking_op(1)\n");
 648
 649                        result = -EIO;
 650                } else
 651                        return;
 652        } else if (ssif_info->multi_pos) {
 653                /* Middle of multi-part read.  Start the next transaction. */
 654                int i;
 655                unsigned char blocknum;
 656
 657                if (len == 0) {
 658                        result = -EIO;
 659                        if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
 660                                pr_info(PFX "Middle message with no data\n");
 661
 662                        goto continue_op;
 663                }
 664
 665                blocknum = data[0];
 666
 667                if (ssif_info->multi_len + len - 1 > IPMI_MAX_MSG_LENGTH) {
 668                        /* Received message too big, abort the operation. */
 669                        result = -E2BIG;
 670                        if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
 671                                pr_info("Received message too big\n");
 672
 673                        goto continue_op;
 674                }
 675
 676                /* Remove the blocknum from the data. */
 677                len--;
 678                for (i = 0; i < len; i++)
 679                        ssif_info->data[i + ssif_info->multi_len] = data[i + 1];
 680                ssif_info->multi_len += len;
 681                if (blocknum == 0xff) {
 682                        /* End of read */
 683                        len = ssif_info->multi_len;
 684                        data = ssif_info->data;
 685                } else if (blocknum + 1 != ssif_info->multi_pos) {
 686                        /*
 687                         * Out of sequence block, just abort.  Block
 688                         * numbers start at zero for the second block,
 689                         * but multi_pos starts at one, so the +1.
 690                         */
 691                        result = -EIO;
 692                } else {
 693                        ssif_inc_stat(ssif_info, received_message_parts);
 694
 695                        ssif_info->multi_pos++;
 696
 697                        rv = ssif_i2c_send(ssif_info, msg_done_handler,
 698                                           I2C_SMBUS_READ,
 699                                           SSIF_IPMI_MULTI_PART_RESPONSE_MIDDLE,
 700                                           ssif_info->recv,
 701                                           I2C_SMBUS_BLOCK_DATA);
 702                        if (rv < 0) {
 703                                if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
 704                                        pr_info(PFX
 705                                                "Error from ssif_i2c_send\n");
 706
 707                                result = -EIO;
 708                        } else
 709                                return;
 710                }
 711        }
 712
 713        if (result < 0) {
 714                ssif_inc_stat(ssif_info, receive_errors);
 715        } else {
 716                ssif_inc_stat(ssif_info, received_messages);
 717                ssif_inc_stat(ssif_info, received_message_parts);
 718        }
 719
 720
 721 continue_op:
 722        if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
 723                pr_info(PFX "DONE 1: state = %d, result=%d.\n",
 724                        ssif_info->ssif_state, result);
 725
 726        flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
 727        msg = ssif_info->curr_msg;
 728        if (msg) {
 729                msg->rsp_size = len;
 730                if (msg->rsp_size > IPMI_MAX_MSG_LENGTH)
 731                        msg->rsp_size = IPMI_MAX_MSG_LENGTH;
 732                memcpy(msg->rsp, data, msg->rsp_size);
 733                ssif_info->curr_msg = NULL;
 734        }
 735
 736        switch (ssif_info->ssif_state) {
 737        case SSIF_NORMAL:
 738                ipmi_ssif_unlock_cond(ssif_info, flags);
 739                if (!msg)
 740                        break;
 741
 742                if (result < 0)
 743                        return_hosed_msg(ssif_info, msg);
 744                else
 745                        deliver_recv_msg(ssif_info, msg);
 746                break;
 747
 748        case SSIF_GETTING_FLAGS:
 749                /* We got the flags from the SSIF, now handle them. */
 750                if ((result < 0) || (len < 4) || (data[2] != 0)) {
 751                        /*
 752                         * Error fetching flags, or invalid length,
 753                         * just give up for now.
 754                         */
 755                        ssif_info->ssif_state = SSIF_NORMAL;
 756                        ipmi_ssif_unlock_cond(ssif_info, flags);
 757                        pr_warn(PFX "Error getting flags: %d %d, %x\n",
 758                               result, len, data[2]);
 759                } else if (data[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
 760                           || data[1] != IPMI_GET_MSG_FLAGS_CMD) {
 761                        pr_warn(PFX "Invalid response getting flags: %x %x\n",
 762                                data[0], data[1]);
 763                } else {
 764                        ssif_inc_stat(ssif_info, flag_fetches);
 765                        ssif_info->msg_flags = data[3];
 766                        handle_flags(ssif_info, flags);
 767                }
 768                break;
 769
 770        case SSIF_CLEARING_FLAGS:
 771                /* We cleared the flags. */
 772                if ((result < 0) || (len < 3) || (data[2] != 0)) {
 773                        /* Error clearing flags */
 774                        pr_warn(PFX "Error clearing flags: %d %d, %x\n",
 775                               result, len, data[2]);
 776                } else if (data[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
 777                           || data[1] != IPMI_CLEAR_MSG_FLAGS_CMD) {
 778                        pr_warn(PFX "Invalid response clearing flags: %x %x\n",
 779                                data[0], data[1]);
 780                }
 781                ssif_info->ssif_state = SSIF_NORMAL;
 782                ipmi_ssif_unlock_cond(ssif_info, flags);
 783                break;
 784
 785        case SSIF_GETTING_EVENTS:
 786                if ((result < 0) || (len < 3) || (msg->rsp[2] != 0)) {
 787                        /* Error getting event, probably done. */
 788                        msg->done(msg);
 789
 790                        /* Take off the event flag. */
 791                        ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
 792                        handle_flags(ssif_info, flags);
 793                } else if (msg->rsp[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
 794                           || msg->rsp[1] != IPMI_READ_EVENT_MSG_BUFFER_CMD) {
 795                        pr_warn(PFX "Invalid response getting events: %x %x\n",
 796                                msg->rsp[0], msg->rsp[1]);
 797                        msg->done(msg);
 798                        /* Take off the event flag. */
 799                        ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL;
 800                        handle_flags(ssif_info, flags);
 801                } else {
 802                        handle_flags(ssif_info, flags);
 803                        ssif_inc_stat(ssif_info, events);
 804                        deliver_recv_msg(ssif_info, msg);
 805                }
 806                break;
 807
 808        case SSIF_GETTING_MESSAGES:
 809                if ((result < 0) || (len < 3) || (msg->rsp[2] != 0)) {
 810                        /* Error getting event, probably done. */
 811                        msg->done(msg);
 812
 813                        /* Take off the msg flag. */
 814                        ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
 815                        handle_flags(ssif_info, flags);
 816                } else if (msg->rsp[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
 817                           || msg->rsp[1] != IPMI_GET_MSG_CMD) {
 818                        pr_warn(PFX "Invalid response clearing flags: %x %x\n",
 819                                msg->rsp[0], msg->rsp[1]);
 820                        msg->done(msg);
 821
 822                        /* Take off the msg flag. */
 823                        ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL;
 824                        handle_flags(ssif_info, flags);
 825                } else {
 826                        ssif_inc_stat(ssif_info, incoming_messages);
 827                        handle_flags(ssif_info, flags);
 828                        deliver_recv_msg(ssif_info, msg);
 829                }
 830                break;
 831        }
 832
 833        flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
 834        if (SSIF_IDLE(ssif_info) && !ssif_info->stopping) {
 835                if (ssif_info->req_events)
 836                        start_event_fetch(ssif_info, flags);
 837                else if (ssif_info->req_flags)
 838                        start_flag_fetch(ssif_info, flags);
 839                else
 840                        start_next_msg(ssif_info, flags);
 841        } else
 842                ipmi_ssif_unlock_cond(ssif_info, flags);
 843
 844        if (ssif_info->ssif_debug & SSIF_DEBUG_STATE)
 845                pr_info(PFX "DONE 2: state = %d.\n", ssif_info->ssif_state);
 846}
 847
 848static void msg_written_handler(struct ssif_info *ssif_info, int result,
 849                                unsigned char *data, unsigned int len)
 850{
 851        int rv;
 852
 853        /* We are single-threaded here, so no need for a lock. */
 854        if (result < 0) {
 855                ssif_info->retries_left--;
 856                if (ssif_info->retries_left > 0) {
 857                        if (!start_resend(ssif_info)) {
 858                                ssif_inc_stat(ssif_info, send_retries);
 859                                return;
 860                        }
 861                        /* request failed, just return the error. */
 862                        ssif_inc_stat(ssif_info, send_errors);
 863
 864                        if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
 865                                pr_info(PFX
 866                                        "Out of retries in msg_written_handler\n");
 867                        msg_done_handler(ssif_info, -EIO, NULL, 0);
 868                        return;
 869                }
 870
 871                ssif_inc_stat(ssif_info, send_errors);
 872
 873                /*
 874                 * Got an error on transmit, let the done routine
 875                 * handle it.
 876                 */
 877                if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
 878                        pr_info("Error in msg_written_handler: %d\n", result);
 879
 880                msg_done_handler(ssif_info, result, NULL, 0);
 881                return;
 882        }
 883
 884        if (ssif_info->multi_data) {
 885                /*
 886                 * In the middle of a multi-data write.  See the comment
 887                 * in the SSIF_MULTI_n_PART case in the probe function
 888                 * for details on the intricacies of this.
 889                 */
 890                int left;
 891
 892                ssif_inc_stat(ssif_info, sent_messages_parts);
 893
 894                left = ssif_info->multi_len - ssif_info->multi_pos;
 895                if (left > 32)
 896                        left = 32;
 897                /* Length byte. */
 898                ssif_info->multi_data[ssif_info->multi_pos] = left;
 899                ssif_info->multi_pos += left;
 900                if (left < 32)
 901                        /*
 902                         * Write is finished.  Note that we must end
 903                         * with a write of less than 32 bytes to
 904                         * complete the transaction, even if it is
 905                         * zero bytes.
 906                         */
 907                        ssif_info->multi_data = NULL;
 908
 909                rv = ssif_i2c_send(ssif_info, msg_written_handler,
 910                                  I2C_SMBUS_WRITE,
 911                                  SSIF_IPMI_MULTI_PART_REQUEST_MIDDLE,
 912                                  ssif_info->multi_data + ssif_info->multi_pos,
 913                                  I2C_SMBUS_BLOCK_DATA);
 914                if (rv < 0) {
 915                        /* request failed, just return the error. */
 916                        ssif_inc_stat(ssif_info, send_errors);
 917
 918                        if (ssif_info->ssif_debug & SSIF_DEBUG_MSG)
 919                                pr_info("Error from i2c_non_blocking_op(3)\n");
 920                        msg_done_handler(ssif_info, -EIO, NULL, 0);
 921                }
 922        } else {
 923                /* Ready to request the result. */
 924                unsigned long oflags, *flags;
 925
 926                ssif_inc_stat(ssif_info, sent_messages);
 927                ssif_inc_stat(ssif_info, sent_messages_parts);
 928
 929                flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
 930                if (ssif_info->got_alert) {
 931                        /* The result is already ready, just start it. */
 932                        ssif_info->got_alert = false;
 933                        ipmi_ssif_unlock_cond(ssif_info, flags);
 934                        start_get(ssif_info);
 935                } else {
 936                        /* Wait a jiffie then request the next message */
 937                        ssif_info->waiting_alert = true;
 938                        ssif_info->retries_left = SSIF_RECV_RETRIES;
 939                        ssif_info->rtc_us_timer = SSIF_MSG_PART_USEC;
 940                        mod_timer(&ssif_info->retry_timer,
 941                                  jiffies + SSIF_MSG_PART_JIFFIES);
 942                        ipmi_ssif_unlock_cond(ssif_info, flags);
 943                }
 944        }
 945}
 946
 947static int start_resend(struct ssif_info *ssif_info)
 948{
 949        int rv;
 950        int command;
 951
 952        ssif_info->got_alert = false;
 953
 954        if (ssif_info->data_len > 32) {
 955                command = SSIF_IPMI_MULTI_PART_REQUEST_START;
 956                ssif_info->multi_data = ssif_info->data;
 957                ssif_info->multi_len = ssif_info->data_len;
 958                /*
 959                 * Subtle thing, this is 32, not 33, because we will
 960                 * overwrite the thing at position 32 (which was just
 961                 * transmitted) with the new length.
 962                 */
 963                ssif_info->multi_pos = 32;
 964                ssif_info->data[0] = 32;
 965        } else {
 966                ssif_info->multi_data = NULL;
 967                command = SSIF_IPMI_REQUEST;
 968                ssif_info->data[0] = ssif_info->data_len;
 969        }
 970
 971        rv = ssif_i2c_send(ssif_info, msg_written_handler, I2C_SMBUS_WRITE,
 972                          command, ssif_info->data, I2C_SMBUS_BLOCK_DATA);
 973        if (rv && (ssif_info->ssif_debug & SSIF_DEBUG_MSG))
 974                pr_info("Error from i2c_non_blocking_op(4)\n");
 975        return rv;
 976}
 977
 978static int start_send(struct ssif_info *ssif_info,
 979                      unsigned char   *data,
 980                      unsigned int    len)
 981{
 982        if (len > IPMI_MAX_MSG_LENGTH)
 983                return -E2BIG;
 984        if (len > ssif_info->max_xmit_msg_size)
 985                return -E2BIG;
 986
 987        ssif_info->retries_left = SSIF_SEND_RETRIES;
 988        memcpy(ssif_info->data + 1, data, len);
 989        ssif_info->data_len = len;
 990        return start_resend(ssif_info);
 991}
 992
 993/* Must be called with the message lock held. */
 994static void start_next_msg(struct ssif_info *ssif_info, unsigned long *flags)
 995{
 996        struct ipmi_smi_msg *msg;
 997        unsigned long oflags;
 998
 999 restart:
1000        if (!SSIF_IDLE(ssif_info)) {
1001                ipmi_ssif_unlock_cond(ssif_info, flags);
1002                return;
1003        }
1004
1005        if (!ssif_info->waiting_msg) {
1006                ssif_info->curr_msg = NULL;
1007                ipmi_ssif_unlock_cond(ssif_info, flags);
1008        } else {
1009                int rv;
1010
1011                ssif_info->curr_msg = ssif_info->waiting_msg;
1012                ssif_info->waiting_msg = NULL;
1013                ipmi_ssif_unlock_cond(ssif_info, flags);
1014                rv = start_send(ssif_info,
1015                                ssif_info->curr_msg->data,
1016                                ssif_info->curr_msg->data_size);
1017                if (rv) {
1018                        msg = ssif_info->curr_msg;
1019                        ssif_info->curr_msg = NULL;
1020                        return_hosed_msg(ssif_info, msg);
1021                        flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
1022                        goto restart;
1023                }
1024        }
1025}
1026
1027static void sender(void                *send_info,
1028                   struct ipmi_smi_msg *msg)
1029{
1030        struct ssif_info *ssif_info = (struct ssif_info *) send_info;
1031        unsigned long oflags, *flags;
1032
1033        BUG_ON(ssif_info->waiting_msg);
1034        ssif_info->waiting_msg = msg;
1035
1036        flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
1037        start_next_msg(ssif_info, flags);
1038
1039        if (ssif_info->ssif_debug & SSIF_DEBUG_TIMING) {
1040                struct timespec64 t;
1041
1042                ktime_get_real_ts64(&t);
1043                pr_info("**Enqueue %02x %02x: %lld.%6.6ld\n",
1044                       msg->data[0], msg->data[1],
1045                       (long long) t.tv_sec, (long) t.tv_nsec / NSEC_PER_USEC);
1046        }
1047}
1048
1049static int get_smi_info(void *send_info, struct ipmi_smi_info *data)
1050{
1051        struct ssif_info *ssif_info = send_info;
1052
1053        data->addr_src = ssif_info->addr_source;
1054        data->dev = &ssif_info->client->dev;
1055        data->addr_info = ssif_info->addr_info;
1056        get_device(data->dev);
1057
1058        return 0;
1059}
1060
1061/*
1062 * Instead of having our own timer to periodically check the message
1063 * flags, we let the message handler drive us.
1064 */
1065static void request_events(void *send_info)
1066{
1067        struct ssif_info *ssif_info = (struct ssif_info *) send_info;
1068        unsigned long oflags, *flags;
1069
1070        if (!ssif_info->has_event_buffer)
1071                return;
1072
1073        flags = ipmi_ssif_lock_cond(ssif_info, &oflags);
1074        /*
1075         * Request flags first, not events, because the lower layer
1076         * doesn't have a way to send an attention.  But make sure
1077         * event checking still happens.
1078         */
1079        ssif_info->req_events = true;
1080        if (SSIF_IDLE(ssif_info))
1081                start_flag_fetch(ssif_info, flags);
1082        else {
1083                ssif_info->req_flags = true;
1084                ipmi_ssif_unlock_cond(ssif_info, flags);
1085        }
1086}
1087
1088static int inc_usecount(void *send_info)
1089{
1090        struct ssif_info *ssif_info = send_info;
1091
1092        if (!i2c_get_adapter(ssif_info->client->adapter->nr))
1093                return -ENODEV;
1094
1095        i2c_use_client(ssif_info->client);
1096        return 0;
1097}
1098
1099static void dec_usecount(void *send_info)
1100{
1101        struct ssif_info *ssif_info = send_info;
1102
1103        i2c_release_client(ssif_info->client);
1104        i2c_put_adapter(ssif_info->client->adapter);
1105}
1106
1107static int ssif_start_processing(void *send_info,
1108                                 ipmi_smi_t intf)
1109{
1110        struct ssif_info *ssif_info = send_info;
1111
1112        ssif_info->intf = intf;
1113
1114        return 0;
1115}
1116
1117#define MAX_SSIF_BMCS 4
1118
1119static unsigned short addr[MAX_SSIF_BMCS];
1120static int num_addrs;
1121module_param_array(addr, ushort, &num_addrs, 0);
1122MODULE_PARM_DESC(addr, "The addresses to scan for IPMI BMCs on the SSIFs.");
1123
1124static char *adapter_name[MAX_SSIF_BMCS];
1125static int num_adapter_names;
1126module_param_array(adapter_name, charp, &num_adapter_names, 0);
1127MODULE_PARM_DESC(adapter_name, "The string name of the I2C device that has the BMC.  By default all devices are scanned.");
1128
1129static int slave_addrs[MAX_SSIF_BMCS];
1130static int num_slave_addrs;
1131module_param_array(slave_addrs, int, &num_slave_addrs, 0);
1132MODULE_PARM_DESC(slave_addrs,
1133                 "The default IPMB slave address for the controller.");
1134
1135static bool alerts_broken;
1136module_param(alerts_broken, bool, 0);
1137MODULE_PARM_DESC(alerts_broken, "Don't enable alerts for the controller.");
1138
1139/*
1140 * Bit 0 enables message debugging, bit 1 enables state debugging, and
1141 * bit 2 enables timing debugging.  This is an array indexed by
1142 * interface number"
1143 */
1144static int dbg[MAX_SSIF_BMCS];
1145static int num_dbg;
1146module_param_array(dbg, int, &num_dbg, 0);
1147MODULE_PARM_DESC(dbg, "Turn on debugging.");
1148
1149static bool ssif_dbg_probe;
1150module_param_named(dbg_probe, ssif_dbg_probe, bool, 0);
1151MODULE_PARM_DESC(dbg_probe, "Enable debugging of probing of adapters.");
1152
1153static int use_thread;
1154module_param(use_thread, int, 0);
1155MODULE_PARM_DESC(use_thread, "Use the thread interface.");
1156
1157static bool ssif_tryacpi = true;
1158module_param_named(tryacpi, ssif_tryacpi, bool, 0);
1159MODULE_PARM_DESC(tryacpi, "Setting this to zero will disable the default scan of the interfaces identified via ACPI");
1160
1161static bool ssif_trydmi = true;
1162module_param_named(trydmi, ssif_trydmi, bool, 0);
1163MODULE_PARM_DESC(trydmi, "Setting this to zero will disable the default scan of the interfaces identified via DMI (SMBIOS)");
1164
1165static DEFINE_MUTEX(ssif_infos_mutex);
1166static LIST_HEAD(ssif_infos);
1167
1168static int ssif_remove(struct i2c_client *client)
1169{
1170        struct ssif_info *ssif_info = i2c_get_clientdata(client);
1171        int rv;
1172
1173        if (!ssif_info)
1174                return 0;
1175
1176        /*
1177         * After this point, we won't deliver anything asychronously
1178         * to the message handler.  We can unregister ourself.
1179         */
1180        rv = ipmi_unregister_smi(ssif_info->intf);
1181        if (rv) {
1182                pr_err(PFX "Unable to unregister device: errno=%d\n", rv);
1183                return rv;
1184        }
1185        ssif_info->intf = NULL;
1186
1187        /* make sure the driver is not looking for flags any more. */
1188        while (ssif_info->ssif_state != SSIF_NORMAL)
1189                schedule_timeout(1);
1190
1191        ssif_info->stopping = true;
1192        del_timer_sync(&ssif_info->retry_timer);
1193        if (ssif_info->thread) {
1194                complete(&ssif_info->wake_thread);
1195                kthread_stop(ssif_info->thread);
1196        }
1197
1198        /*
1199         * No message can be outstanding now, we have removed the
1200         * upper layer and it permitted us to do so.
1201         */
1202        kfree(ssif_info);
1203        return 0;
1204}
1205
1206static int do_cmd(struct i2c_client *client, int len, unsigned char *msg,
1207                  int *resp_len, unsigned char *resp)
1208{
1209        int retry_cnt;
1210        int ret;
1211
1212        retry_cnt = SSIF_SEND_RETRIES;
1213 retry1:
1214        ret = i2c_smbus_write_block_data(client, SSIF_IPMI_REQUEST, len, msg);
1215        if (ret) {
1216                retry_cnt--;
1217                if (retry_cnt > 0)
1218                        goto retry1;
1219                return -ENODEV;
1220        }
1221
1222        ret = -ENODEV;
1223        retry_cnt = SSIF_RECV_RETRIES;
1224        while (retry_cnt > 0) {
1225                ret = i2c_smbus_read_block_data(client, SSIF_IPMI_RESPONSE,
1226                                                resp);
1227                if (ret > 0)
1228                        break;
1229                msleep(SSIF_MSG_MSEC);
1230                retry_cnt--;
1231                if (retry_cnt <= 0)
1232                        break;
1233        }
1234
1235        if (ret > 0) {
1236                /* Validate that the response is correct. */
1237                if (ret < 3 ||
1238                    (resp[0] != (msg[0] | (1 << 2))) ||
1239                    (resp[1] != msg[1]))
1240                        ret = -EINVAL;
1241                else {
1242                        *resp_len = ret;
1243                        ret = 0;
1244                }
1245        }
1246
1247        return ret;
1248}
1249
1250static int ssif_detect(struct i2c_client *client, struct i2c_board_info *info)
1251{
1252        unsigned char *resp;
1253        unsigned char msg[3];
1254        int           rv;
1255        int           len;
1256
1257        resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
1258        if (!resp)
1259                return -ENOMEM;
1260
1261        /* Do a Get Device ID command, since it is required. */
1262        msg[0] = IPMI_NETFN_APP_REQUEST << 2;
1263        msg[1] = IPMI_GET_DEVICE_ID_CMD;
1264        rv = do_cmd(client, 2, msg, &len, resp);
1265        if (rv)
1266                rv = -ENODEV;
1267        else
1268                strlcpy(info->type, DEVICE_NAME, I2C_NAME_SIZE);
1269        kfree(resp);
1270        return rv;
1271}
1272
1273static int smi_type_proc_show(struct seq_file *m, void *v)
1274{
1275        seq_puts(m, "ssif\n");
1276
1277        return 0;
1278}
1279
1280static int smi_type_proc_open(struct inode *inode, struct file *file)
1281{
1282        return single_open(file, smi_type_proc_show, inode->i_private);
1283}
1284
1285static const struct file_operations smi_type_proc_ops = {
1286        .open           = smi_type_proc_open,
1287        .read           = seq_read,
1288        .llseek         = seq_lseek,
1289        .release        = single_release,
1290};
1291
1292static int smi_stats_proc_show(struct seq_file *m, void *v)
1293{
1294        struct ssif_info *ssif_info = m->private;
1295
1296        seq_printf(m, "sent_messages:          %u\n",
1297                   ssif_get_stat(ssif_info, sent_messages));
1298        seq_printf(m, "sent_messages_parts:    %u\n",
1299                   ssif_get_stat(ssif_info, sent_messages_parts));
1300        seq_printf(m, "send_retries:           %u\n",
1301                   ssif_get_stat(ssif_info, send_retries));
1302        seq_printf(m, "send_errors:            %u\n",
1303                   ssif_get_stat(ssif_info, send_errors));
1304        seq_printf(m, "received_messages:      %u\n",
1305                   ssif_get_stat(ssif_info, received_messages));
1306        seq_printf(m, "received_message_parts: %u\n",
1307                   ssif_get_stat(ssif_info, received_message_parts));
1308        seq_printf(m, "receive_retries:        %u\n",
1309                   ssif_get_stat(ssif_info, receive_retries));
1310        seq_printf(m, "receive_errors:         %u\n",
1311                   ssif_get_stat(ssif_info, receive_errors));
1312        seq_printf(m, "flag_fetches:           %u\n",
1313                   ssif_get_stat(ssif_info, flag_fetches));
1314        seq_printf(m, "hosed:                  %u\n",
1315                   ssif_get_stat(ssif_info, hosed));
1316        seq_printf(m, "events:                 %u\n",
1317                   ssif_get_stat(ssif_info, events));
1318        seq_printf(m, "watchdog_pretimeouts:   %u\n",
1319                   ssif_get_stat(ssif_info, watchdog_pretimeouts));
1320        seq_printf(m, "alerts:                 %u\n",
1321                   ssif_get_stat(ssif_info, alerts));
1322        return 0;
1323}
1324
1325static int smi_stats_proc_open(struct inode *inode, struct file *file)
1326{
1327        return single_open(file, smi_stats_proc_show, PDE_DATA(inode));
1328}
1329
1330static const struct file_operations smi_stats_proc_ops = {
1331        .open           = smi_stats_proc_open,
1332        .read           = seq_read,
1333        .llseek         = seq_lseek,
1334        .release        = single_release,
1335};
1336
1337static int strcmp_nospace(char *s1, char *s2)
1338{
1339        while (*s1 && *s2) {
1340                while (isspace(*s1))
1341                        s1++;
1342                while (isspace(*s2))
1343                        s2++;
1344                if (*s1 > *s2)
1345                        return 1;
1346                if (*s1 < *s2)
1347                        return -1;
1348                s1++;
1349                s2++;
1350        }
1351        return 0;
1352}
1353
1354static struct ssif_addr_info *ssif_info_find(unsigned short addr,
1355                                             char *adapter_name,
1356                                             bool match_null_name)
1357{
1358        struct ssif_addr_info *info, *found = NULL;
1359
1360restart:
1361        list_for_each_entry(info, &ssif_infos, link) {
1362                if (info->binfo.addr == addr) {
1363                        if (info->adapter_name || adapter_name) {
1364                                if (!info->adapter_name != !adapter_name) {
1365                                        /* One is NULL and one is not */
1366                                        continue;
1367                                }
1368                                if (adapter_name &&
1369                                    strcmp_nospace(info->adapter_name,
1370                                                   adapter_name))
1371                                        /* Names do not match */
1372                                        continue;
1373                        }
1374                        found = info;
1375                        break;
1376                }
1377        }
1378
1379        if (!found && match_null_name) {
1380                /* Try to get an exact match first, then try with a NULL name */
1381                adapter_name = NULL;
1382                match_null_name = false;
1383                goto restart;
1384        }
1385
1386        return found;
1387}
1388
1389static bool check_acpi(struct ssif_info *ssif_info, struct device *dev)
1390{
1391#ifdef CONFIG_ACPI
1392        acpi_handle acpi_handle;
1393
1394        acpi_handle = ACPI_HANDLE(dev);
1395        if (acpi_handle) {
1396                ssif_info->addr_source = SI_ACPI;
1397                ssif_info->addr_info.acpi_info.acpi_handle = acpi_handle;
1398                return true;
1399        }
1400#endif
1401        return false;
1402}
1403
1404/*
1405 * Global enables we care about.
1406 */
1407#define GLOBAL_ENABLES_MASK (IPMI_BMC_EVT_MSG_BUFF | IPMI_BMC_RCV_MSG_INTR | \
1408                             IPMI_BMC_EVT_MSG_INTR)
1409
1410static int ssif_probe(struct i2c_client *client, const struct i2c_device_id *id)
1411{
1412        unsigned char     msg[3];
1413        unsigned char     *resp;
1414        struct ssif_info   *ssif_info;
1415        int               rv = 0;
1416        int               len;
1417        int               i;
1418        u8                slave_addr = 0;
1419        struct ssif_addr_info *addr_info = NULL;
1420
1421
1422        resp = kmalloc(IPMI_MAX_MSG_LENGTH, GFP_KERNEL);
1423        if (!resp)
1424                return -ENOMEM;
1425
1426        ssif_info = kzalloc(sizeof(*ssif_info), GFP_KERNEL);
1427        if (!ssif_info) {
1428                kfree(resp);
1429                return -ENOMEM;
1430        }
1431
1432        if (!check_acpi(ssif_info, &client->dev)) {
1433                addr_info = ssif_info_find(client->addr, client->adapter->name,
1434                                           true);
1435                if (!addr_info) {
1436                        /* Must have come in through sysfs. */
1437                        ssif_info->addr_source = SI_HOTMOD;
1438                } else {
1439                        ssif_info->addr_source = addr_info->addr_src;
1440                        ssif_info->ssif_debug = addr_info->debug;
1441                        ssif_info->addr_info = addr_info->addr_info;
1442                        slave_addr = addr_info->slave_addr;
1443                }
1444        }
1445
1446        pr_info(PFX "Trying %s-specified SSIF interface at i2c address 0x%x, adapter %s, slave address 0x%x\n",
1447               ipmi_addr_src_to_str(ssif_info->addr_source),
1448               client->addr, client->adapter->name, slave_addr);
1449
1450        /*
1451         * Do a Get Device ID command, since it comes back with some
1452         * useful info.
1453         */
1454        msg[0] = IPMI_NETFN_APP_REQUEST << 2;
1455        msg[1] = IPMI_GET_DEVICE_ID_CMD;
1456        rv = do_cmd(client, 2, msg, &len, resp);
1457        if (rv)
1458                goto out;
1459
1460        rv = ipmi_demangle_device_id(resp, len, &ssif_info->device_id);
1461        if (rv)
1462                goto out;
1463
1464        ssif_info->client = client;
1465        i2c_set_clientdata(client, ssif_info);
1466
1467        /* Now check for system interface capabilities */
1468        msg[0] = IPMI_NETFN_APP_REQUEST << 2;
1469        msg[1] = IPMI_GET_SYSTEM_INTERFACE_CAPABILITIES_CMD;
1470        msg[2] = 0; /* SSIF */
1471        rv = do_cmd(client, 3, msg, &len, resp);
1472        if (!rv && (len >= 3) && (resp[2] == 0)) {
1473                if (len < 7) {
1474                        if (ssif_dbg_probe)
1475                                pr_info(PFX "SSIF info too short: %d\n", len);
1476                        goto no_support;
1477                }
1478
1479                /* Got a good SSIF response, handle it. */
1480                ssif_info->max_xmit_msg_size = resp[5];
1481                ssif_info->max_recv_msg_size = resp[6];
1482                ssif_info->multi_support = (resp[4] >> 6) & 0x3;
1483                ssif_info->supports_pec = (resp[4] >> 3) & 0x1;
1484
1485                /* Sanitize the data */
1486                switch (ssif_info->multi_support) {
1487                case SSIF_NO_MULTI:
1488                        if (ssif_info->max_xmit_msg_size > 32)
1489                                ssif_info->max_xmit_msg_size = 32;
1490                        if (ssif_info->max_recv_msg_size > 32)
1491                                ssif_info->max_recv_msg_size = 32;
1492                        break;
1493
1494                case SSIF_MULTI_2_PART:
1495                        if (ssif_info->max_xmit_msg_size > 63)
1496                                ssif_info->max_xmit_msg_size = 63;
1497                        if (ssif_info->max_recv_msg_size > 62)
1498                                ssif_info->max_recv_msg_size = 62;
1499                        break;
1500
1501                case SSIF_MULTI_n_PART:
1502                        /*
1503                         * The specification is rather confusing at
1504                         * this point, but I think I understand what
1505                         * is meant.  At least I have a workable
1506                         * solution.  With multi-part messages, you
1507                         * cannot send a message that is a multiple of
1508                         * 32-bytes in length, because the start and
1509                         * middle messages are 32-bytes and the end
1510                         * message must be at least one byte.  You
1511                         * can't fudge on an extra byte, that would
1512                         * screw up things like fru data writes.  So
1513                         * we limit the length to 63 bytes.  That way
1514                         * a 32-byte message gets sent as a single
1515                         * part.  A larger message will be a 32-byte
1516                         * start and the next message is always going
1517                         * to be 1-31 bytes in length.  Not ideal, but
1518                         * it should work.
1519                         */
1520                        if (ssif_info->max_xmit_msg_size > 63)
1521                                ssif_info->max_xmit_msg_size = 63;
1522                        break;
1523
1524                default:
1525                        /* Data is not sane, just give up. */
1526                        goto no_support;
1527                }
1528        } else {
1529 no_support:
1530                /* Assume no multi-part or PEC support */
1531                pr_info(PFX "Error fetching SSIF: %d %d %2.2x, your system probably doesn't support this command so using defaults\n",
1532                       rv, len, resp[2]);
1533
1534                ssif_info->max_xmit_msg_size = 32;
1535                ssif_info->max_recv_msg_size = 32;
1536                ssif_info->multi_support = SSIF_NO_MULTI;
1537                ssif_info->supports_pec = 0;
1538        }
1539
1540        /* Make sure the NMI timeout is cleared. */
1541        msg[0] = IPMI_NETFN_APP_REQUEST << 2;
1542        msg[1] = IPMI_CLEAR_MSG_FLAGS_CMD;
1543        msg[2] = WDT_PRE_TIMEOUT_INT;
1544        rv = do_cmd(client, 3, msg, &len, resp);
1545        if (rv || (len < 3) || (resp[2] != 0))
1546                pr_warn(PFX "Unable to clear message flags: %d %d %2.2x\n",
1547                        rv, len, resp[2]);
1548
1549        /* Attempt to enable the event buffer. */
1550        msg[0] = IPMI_NETFN_APP_REQUEST << 2;
1551        msg[1] = IPMI_GET_BMC_GLOBAL_ENABLES_CMD;
1552        rv = do_cmd(client, 2, msg, &len, resp);
1553        if (rv || (len < 4) || (resp[2] != 0)) {
1554                pr_warn(PFX "Error getting global enables: %d %d %2.2x\n",
1555                        rv, len, resp[2]);
1556                rv = 0; /* Not fatal */
1557                goto found;
1558        }
1559
1560        ssif_info->global_enables = resp[3];
1561
1562        if (resp[3] & IPMI_BMC_EVT_MSG_BUFF) {
1563                ssif_info->has_event_buffer = true;
1564                /* buffer is already enabled, nothing to do. */
1565                goto found;
1566        }
1567
1568        msg[0] = IPMI_NETFN_APP_REQUEST << 2;
1569        msg[1] = IPMI_SET_BMC_GLOBAL_ENABLES_CMD;
1570        msg[2] = ssif_info->global_enables | IPMI_BMC_EVT_MSG_BUFF;
1571        rv = do_cmd(client, 3, msg, &len, resp);
1572        if (rv || (len < 2)) {
1573                pr_warn(PFX "Error setting global enables: %d %d %2.2x\n",
1574                        rv, len, resp[2]);
1575                rv = 0; /* Not fatal */
1576                goto found;
1577        }
1578
1579        if (resp[2] == 0) {
1580                /* A successful return means the event buffer is supported. */
1581                ssif_info->has_event_buffer = true;
1582                ssif_info->global_enables |= IPMI_BMC_EVT_MSG_BUFF;
1583        }
1584
1585        /* Some systems don't behave well if you enable alerts. */
1586        if (alerts_broken)
1587                goto found;
1588
1589        msg[0] = IPMI_NETFN_APP_REQUEST << 2;
1590        msg[1] = IPMI_SET_BMC_GLOBAL_ENABLES_CMD;
1591        msg[2] = ssif_info->global_enables | IPMI_BMC_RCV_MSG_INTR;
1592        rv = do_cmd(client, 3, msg, &len, resp);
1593        if (rv || (len < 2)) {
1594                pr_warn(PFX "Error setting global enables: %d %d %2.2x\n",
1595                        rv, len, resp[2]);
1596                rv = 0; /* Not fatal */
1597                goto found;
1598        }
1599
1600        if (resp[2] == 0) {
1601                /* A successful return means the alert is supported. */
1602                ssif_info->supports_alert = true;
1603                ssif_info->global_enables |= IPMI_BMC_RCV_MSG_INTR;
1604        }
1605
1606 found:
1607        ssif_info->intf_num = atomic_inc_return(&next_intf);
1608
1609        if (ssif_dbg_probe) {
1610                pr_info("ssif_probe: i2c_probe found device at i2c address %x\n",
1611                        client->addr);
1612        }
1613
1614        spin_lock_init(&ssif_info->lock);
1615        ssif_info->ssif_state = SSIF_NORMAL;
1616        init_timer(&ssif_info->retry_timer);
1617        ssif_info->retry_timer.data = (unsigned long) ssif_info;
1618        ssif_info->retry_timer.function = retry_timeout;
1619
1620        for (i = 0; i < SSIF_NUM_STATS; i++)
1621                atomic_set(&ssif_info->stats[i], 0);
1622
1623        if (ssif_info->supports_pec)
1624                ssif_info->client->flags |= I2C_CLIENT_PEC;
1625
1626        ssif_info->handlers.owner = THIS_MODULE;
1627        ssif_info->handlers.start_processing = ssif_start_processing;
1628        ssif_info->handlers.get_smi_info = get_smi_info;
1629        ssif_info->handlers.sender = sender;
1630        ssif_info->handlers.request_events = request_events;
1631        ssif_info->handlers.inc_usecount = inc_usecount;
1632        ssif_info->handlers.dec_usecount = dec_usecount;
1633
1634        {
1635                unsigned int thread_num;
1636
1637                thread_num = ((ssif_info->client->adapter->nr << 8) |
1638                              ssif_info->client->addr);
1639                init_completion(&ssif_info->wake_thread);
1640                ssif_info->thread = kthread_run(ipmi_ssif_thread, ssif_info,
1641                                               "kssif%4.4x", thread_num);
1642                if (IS_ERR(ssif_info->thread)) {
1643                        rv = PTR_ERR(ssif_info->thread);
1644                        dev_notice(&ssif_info->client->dev,
1645                                   "Could not start kernel thread: error %d\n",
1646                                   rv);
1647                        goto out;
1648                }
1649        }
1650
1651        rv = ipmi_register_smi(&ssif_info->handlers,
1652                               ssif_info,
1653                               &ssif_info->device_id,
1654                               &ssif_info->client->dev,
1655                               slave_addr);
1656         if (rv) {
1657                pr_err(PFX "Unable to register device: error %d\n", rv);
1658                goto out;
1659        }
1660
1661        rv = ipmi_smi_add_proc_entry(ssif_info->intf, "type",
1662                                     &smi_type_proc_ops,
1663                                     ssif_info);
1664        if (rv) {
1665                pr_err(PFX "Unable to create proc entry: %d\n", rv);
1666                goto out_err_unreg;
1667        }
1668
1669        rv = ipmi_smi_add_proc_entry(ssif_info->intf, "ssif_stats",
1670                                     &smi_stats_proc_ops,
1671                                     ssif_info);
1672        if (rv) {
1673                pr_err(PFX "Unable to create proc entry: %d\n", rv);
1674                goto out_err_unreg;
1675        }
1676
1677 out:
1678        if (rv)
1679                kfree(ssif_info);
1680        kfree(resp);
1681        return rv;
1682
1683 out_err_unreg:
1684        ipmi_unregister_smi(ssif_info->intf);
1685        goto out;
1686}
1687
1688static int ssif_adapter_handler(struct device *adev, void *opaque)
1689{
1690        struct ssif_addr_info *addr_info = opaque;
1691
1692        if (adev->type != &i2c_adapter_type)
1693                return 0;
1694
1695        i2c_new_device(to_i2c_adapter(adev), &addr_info->binfo);
1696
1697        if (!addr_info->adapter_name)
1698                return 1; /* Only try the first I2C adapter by default. */
1699        return 0;
1700}
1701
1702static int new_ssif_client(int addr, char *adapter_name,
1703                           int debug, int slave_addr,
1704                           enum ipmi_addr_src addr_src)
1705{
1706        struct ssif_addr_info *addr_info;
1707        int rv = 0;
1708
1709        mutex_lock(&ssif_infos_mutex);
1710        if (ssif_info_find(addr, adapter_name, false)) {
1711                rv = -EEXIST;
1712                goto out_unlock;
1713        }
1714
1715        addr_info = kzalloc(sizeof(*addr_info), GFP_KERNEL);
1716        if (!addr_info) {
1717                rv = -ENOMEM;
1718                goto out_unlock;
1719        }
1720
1721        if (adapter_name) {
1722                addr_info->adapter_name = kstrdup(adapter_name, GFP_KERNEL);
1723                if (!addr_info->adapter_name) {
1724                        kfree(addr_info);
1725                        rv = -ENOMEM;
1726                        goto out_unlock;
1727                }
1728        }
1729
1730        strncpy(addr_info->binfo.type, DEVICE_NAME,
1731                sizeof(addr_info->binfo.type));
1732        addr_info->binfo.addr = addr;
1733        addr_info->binfo.platform_data = addr_info;
1734        addr_info->debug = debug;
1735        addr_info->slave_addr = slave_addr;
1736        addr_info->addr_src = addr_src;
1737
1738        list_add_tail(&addr_info->link, &ssif_infos);
1739
1740        if (initialized)
1741                i2c_for_each_dev(addr_info, ssif_adapter_handler);
1742        /* Otherwise address list will get it */
1743
1744out_unlock:
1745        mutex_unlock(&ssif_infos_mutex);
1746        return rv;
1747}
1748
1749static void free_ssif_clients(void)
1750{
1751        struct ssif_addr_info *info, *tmp;
1752
1753        mutex_lock(&ssif_infos_mutex);
1754        list_for_each_entry_safe(info, tmp, &ssif_infos, link) {
1755                list_del(&info->link);
1756                kfree(info->adapter_name);
1757                kfree(info);
1758        }
1759        mutex_unlock(&ssif_infos_mutex);
1760}
1761
1762static unsigned short *ssif_address_list(void)
1763{
1764        struct ssif_addr_info *info;
1765        unsigned int count = 0, i;
1766        unsigned short *address_list;
1767
1768        list_for_each_entry(info, &ssif_infos, link)
1769                count++;
1770
1771        address_list = kzalloc(sizeof(*address_list) * (count + 1), GFP_KERNEL);
1772        if (!address_list)
1773                return NULL;
1774
1775        i = 0;
1776        list_for_each_entry(info, &ssif_infos, link) {
1777                unsigned short addr = info->binfo.addr;
1778                int j;
1779
1780                for (j = 0; j < i; j++) {
1781                        if (address_list[j] == addr)
1782                                goto skip_addr;
1783                }
1784                address_list[i] = addr;
1785skip_addr:
1786                i++;
1787        }
1788        address_list[i] = I2C_CLIENT_END;
1789
1790        return address_list;
1791}
1792
1793#ifdef CONFIG_ACPI
1794static const struct acpi_device_id ssif_acpi_match[] = {
1795        { "IPI0001", 0 },
1796        { },
1797};
1798MODULE_DEVICE_TABLE(acpi, ssif_acpi_match);
1799
1800/*
1801 * Once we get an ACPI failure, we don't try any more, because we go
1802 * through the tables sequentially.  Once we don't find a table, there
1803 * are no more.
1804 */
1805static int acpi_failure;
1806
1807/*
1808 * Defined in the IPMI 2.0 spec.
1809 */
1810struct SPMITable {
1811        s8      Signature[4];
1812        u32     Length;
1813        u8      Revision;
1814        u8      Checksum;
1815        s8      OEMID[6];
1816        s8      OEMTableID[8];
1817        s8      OEMRevision[4];
1818        s8      CreatorID[4];
1819        s8      CreatorRevision[4];
1820        u8      InterfaceType;
1821        u8      IPMIlegacy;
1822        s16     SpecificationRevision;
1823
1824        /*
1825         * Bit 0 - SCI interrupt supported
1826         * Bit 1 - I/O APIC/SAPIC
1827         */
1828        u8      InterruptType;
1829
1830        /*
1831         * If bit 0 of InterruptType is set, then this is the SCI
1832         * interrupt in the GPEx_STS register.
1833         */
1834        u8      GPE;
1835
1836        s16     Reserved;
1837
1838        /*
1839         * If bit 1 of InterruptType is set, then this is the I/O
1840         * APIC/SAPIC interrupt.
1841         */
1842        u32     GlobalSystemInterrupt;
1843
1844        /* The actual register address. */
1845        struct acpi_generic_address addr;
1846
1847        u8      UID[4];
1848
1849        s8      spmi_id[1]; /* A '\0' terminated array starts here. */
1850};
1851
1852static int try_init_spmi(struct SPMITable *spmi)
1853{
1854        unsigned short myaddr;
1855
1856        if (num_addrs >= MAX_SSIF_BMCS)
1857                return -1;
1858
1859        if (spmi->IPMIlegacy != 1) {
1860                pr_warn("IPMI: Bad SPMI legacy: %d\n", spmi->IPMIlegacy);
1861                return -ENODEV;
1862        }
1863
1864        if (spmi->InterfaceType != 4)
1865                return -ENODEV;
1866
1867        if (spmi->addr.space_id != ACPI_ADR_SPACE_SMBUS) {
1868                pr_warn(PFX "Invalid ACPI SSIF I/O Address type: %d\n",
1869                        spmi->addr.space_id);
1870                return -EIO;
1871        }
1872
1873        myaddr = spmi->addr.address >> 1;
1874
1875        return new_ssif_client(myaddr, NULL, 0, 0, SI_SPMI);
1876}
1877
1878static void spmi_find_bmc(void)
1879{
1880        acpi_status      status;
1881        struct SPMITable *spmi;
1882        int              i;
1883
1884        if (acpi_disabled)
1885                return;
1886
1887        if (acpi_failure)
1888                return;
1889
1890        for (i = 0; ; i++) {
1891                status = acpi_get_table(ACPI_SIG_SPMI, i+1,
1892                                        (struct acpi_table_header **)&spmi);
1893                if (status != AE_OK)
1894                        return;
1895
1896                try_init_spmi(spmi);
1897        }
1898}
1899#else
1900static void spmi_find_bmc(void) { }
1901#endif
1902
1903#ifdef CONFIG_DMI
1904static int decode_dmi(const struct dmi_device *dmi_dev)
1905{
1906        struct dmi_header *dm = dmi_dev->device_data;
1907        u8             *data = (u8 *) dm;
1908        u8             len = dm->length;
1909        unsigned short myaddr;
1910        int            slave_addr;
1911
1912        if (num_addrs >= MAX_SSIF_BMCS)
1913                return -1;
1914
1915        if (len < 9)
1916                return -1;
1917
1918        if (data[0x04] != 4) /* Not SSIF */
1919                return -1;
1920
1921        if ((data[8] >> 1) == 0) {
1922                /*
1923                 * Some broken systems put the I2C address in
1924                 * the slave address field.  We try to
1925                 * accommodate them here.
1926                 */
1927                myaddr = data[6] >> 1;
1928                slave_addr = 0;
1929        } else {
1930                myaddr = data[8] >> 1;
1931                slave_addr = data[6];
1932        }
1933
1934        return new_ssif_client(myaddr, NULL, 0, 0, SI_SMBIOS);
1935}
1936
1937static void dmi_iterator(void)
1938{
1939        const struct dmi_device *dev = NULL;
1940
1941        while ((dev = dmi_find_device(DMI_DEV_TYPE_IPMI, NULL, dev)))
1942                decode_dmi(dev);
1943}
1944#else
1945static void dmi_iterator(void) { }
1946#endif
1947
1948static const struct i2c_device_id ssif_id[] = {
1949        { DEVICE_NAME, 0 },
1950        { }
1951};
1952MODULE_DEVICE_TABLE(i2c, ssif_id);
1953
1954static struct i2c_driver ssif_i2c_driver = {
1955        .class          = I2C_CLASS_HWMON,
1956        .driver         = {
1957                .name                   = DEVICE_NAME
1958        },
1959        .probe          = ssif_probe,
1960        .remove         = ssif_remove,
1961        .alert          = ssif_alert,
1962        .id_table       = ssif_id,
1963        .detect         = ssif_detect
1964};
1965
1966static int init_ipmi_ssif(void)
1967{
1968        int i;
1969        int rv;
1970
1971        if (initialized)
1972                return 0;
1973
1974        pr_info("IPMI SSIF Interface driver\n");
1975
1976        /* build list for i2c from addr list */
1977        for (i = 0; i < num_addrs; i++) {
1978                rv = new_ssif_client(addr[i], adapter_name[i],
1979                                     dbg[i], slave_addrs[i],
1980                                     SI_HARDCODED);
1981                if (rv)
1982                        pr_err(PFX
1983                               "Couldn't add hardcoded device at addr 0x%x\n",
1984                               addr[i]);
1985        }
1986
1987        if (ssif_tryacpi)
1988                ssif_i2c_driver.driver.acpi_match_table =
1989                        ACPI_PTR(ssif_acpi_match);
1990        if (ssif_trydmi)
1991                dmi_iterator();
1992        if (ssif_tryacpi)
1993                spmi_find_bmc();
1994
1995        ssif_i2c_driver.address_list = ssif_address_list();
1996
1997        rv = i2c_add_driver(&ssif_i2c_driver);
1998        if (!rv)
1999                initialized = true;
2000
2001        return rv;
2002}
2003module_init(init_ipmi_ssif);
2004
2005static void cleanup_ipmi_ssif(void)
2006{
2007        if (!initialized)
2008                return;
2009
2010        initialized = false;
2011
2012        i2c_del_driver(&ssif_i2c_driver);
2013
2014        free_ssif_clients();
2015}
2016module_exit(cleanup_ipmi_ssif);
2017
2018MODULE_AUTHOR("Todd C Davis <todd.c.davis@intel.com>, Corey Minyard <minyard@acm.org>");
2019MODULE_DESCRIPTION("IPMI driver for management controllers on a SMBus");
2020MODULE_LICENSE("GPL");
2021