ssif_info 200 drivers/char/ipmi/ipmi_ssif.c struct ssif_info; ssif_info 202 drivers/char/ipmi/ipmi_ssif.c typedef void (*ssif_i2c_done)(struct ssif_info *ssif_info, int result, ssif_info 307 drivers/char/ipmi/ipmi_ssif.c static void return_hosed_msg(struct ssif_info *ssif_info, ssif_info 309 drivers/char/ipmi/ipmi_ssif.c static void start_next_msg(struct ssif_info *ssif_info, unsigned long *flags); ssif_info 310 drivers/char/ipmi/ipmi_ssif.c static int start_send(struct ssif_info *ssif_info, ssif_info 314 drivers/char/ipmi/ipmi_ssif.c static unsigned long *ipmi_ssif_lock_cond(struct ssif_info *ssif_info, ssif_info 317 drivers/char/ipmi/ipmi_ssif.c spin_lock_irqsave(&ssif_info->lock, *flags); ssif_info 321 drivers/char/ipmi/ipmi_ssif.c static void ipmi_ssif_unlock_cond(struct ssif_info *ssif_info, ssif_info 324 drivers/char/ipmi/ipmi_ssif.c spin_unlock_irqrestore(&ssif_info->lock, *flags); ssif_info 327 drivers/char/ipmi/ipmi_ssif.c static void deliver_recv_msg(struct ssif_info *ssif_info, ssif_info 331 drivers/char/ipmi/ipmi_ssif.c return_hosed_msg(ssif_info, msg); ssif_info 332 drivers/char/ipmi/ipmi_ssif.c dev_err(&ssif_info->client->dev, ssif_info 336 drivers/char/ipmi/ipmi_ssif.c ipmi_smi_msg_received(ssif_info->intf, msg); ssif_info 340 drivers/char/ipmi/ipmi_ssif.c static void return_hosed_msg(struct ssif_info *ssif_info, ssif_info 343 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, hosed); ssif_info 351 drivers/char/ipmi/ipmi_ssif.c deliver_recv_msg(ssif_info, msg); ssif_info 360 drivers/char/ipmi/ipmi_ssif.c static void start_clear_flags(struct ssif_info *ssif_info, unsigned long *flags) ssif_info 364 drivers/char/ipmi/ipmi_ssif.c ssif_info->msg_flags &= ~WDT_PRE_TIMEOUT_INT; ssif_info 365 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_CLEARING_FLAGS; ssif_info 366 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 373 drivers/char/ipmi/ipmi_ssif.c if (start_send(ssif_info, msg, 3) != 0) { ssif_info 375 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_NORMAL; ssif_info 379 drivers/char/ipmi/ipmi_ssif.c static void start_flag_fetch(struct ssif_info *ssif_info, unsigned long *flags) ssif_info 383 drivers/char/ipmi/ipmi_ssif.c ssif_info->req_flags = false; ssif_info 384 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_GETTING_FLAGS; ssif_info 385 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 389 drivers/char/ipmi/ipmi_ssif.c if (start_send(ssif_info, mb, 2) != 0) ssif_info 390 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_NORMAL; ssif_info 393 drivers/char/ipmi/ipmi_ssif.c static void check_start_send(struct ssif_info *ssif_info, unsigned long *flags, ssif_info 396 drivers/char/ipmi/ipmi_ssif.c if (start_send(ssif_info, msg->data, msg->data_size) != 0) { ssif_info 399 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 400 drivers/char/ipmi/ipmi_ssif.c ssif_info->curr_msg = NULL; ssif_info 401 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_NORMAL; ssif_info 402 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 407 drivers/char/ipmi/ipmi_ssif.c static void start_event_fetch(struct ssif_info *ssif_info, unsigned long *flags) ssif_info 411 drivers/char/ipmi/ipmi_ssif.c ssif_info->req_events = false; ssif_info 415 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_NORMAL; ssif_info 416 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 420 drivers/char/ipmi/ipmi_ssif.c ssif_info->curr_msg = msg; ssif_info 421 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_GETTING_EVENTS; ssif_info 422 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 428 drivers/char/ipmi/ipmi_ssif.c check_start_send(ssif_info, flags, msg); ssif_info 431 drivers/char/ipmi/ipmi_ssif.c static void start_recv_msg_fetch(struct ssif_info *ssif_info, ssif_info 438 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_NORMAL; ssif_info 439 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 443 drivers/char/ipmi/ipmi_ssif.c ssif_info->curr_msg = msg; ssif_info 444 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_GETTING_MESSAGES; ssif_info 445 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 451 drivers/char/ipmi/ipmi_ssif.c check_start_send(ssif_info, flags, msg); ssif_info 460 drivers/char/ipmi/ipmi_ssif.c static void handle_flags(struct ssif_info *ssif_info, unsigned long *flags) ssif_info 462 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->msg_flags & WDT_PRE_TIMEOUT_INT) { ssif_info 464 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, watchdog_pretimeouts); ssif_info 465 drivers/char/ipmi/ipmi_ssif.c start_clear_flags(ssif_info, flags); ssif_info 466 drivers/char/ipmi/ipmi_ssif.c ipmi_smi_watchdog_pretimeout(ssif_info->intf); ssif_info 467 drivers/char/ipmi/ipmi_ssif.c } else if (ssif_info->msg_flags & RECEIVE_MSG_AVAIL) ssif_info 469 drivers/char/ipmi/ipmi_ssif.c start_recv_msg_fetch(ssif_info, flags); ssif_info 470 drivers/char/ipmi/ipmi_ssif.c else if (ssif_info->msg_flags & EVENT_MSG_BUFFER_FULL) ssif_info 472 drivers/char/ipmi/ipmi_ssif.c start_event_fetch(ssif_info, flags); ssif_info 474 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_NORMAL; ssif_info 475 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 481 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = data; ssif_info 488 drivers/char/ipmi/ipmi_ssif.c &ssif_info->wake_thread); ssif_info 489 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->stopping) ssif_info 493 drivers/char/ipmi/ipmi_ssif.c init_completion(&ssif_info->wake_thread); ssif_info 495 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->i2c_read_write == I2C_SMBUS_WRITE) { ssif_info 497 drivers/char/ipmi/ipmi_ssif.c ssif_info->client, ssif_info->i2c_command, ssif_info 498 drivers/char/ipmi/ipmi_ssif.c ssif_info->i2c_data[0], ssif_info 499 drivers/char/ipmi/ipmi_ssif.c ssif_info->i2c_data + 1); ssif_info 500 drivers/char/ipmi/ipmi_ssif.c ssif_info->done_handler(ssif_info, result, NULL, 0); ssif_info 503 drivers/char/ipmi/ipmi_ssif.c ssif_info->client, ssif_info->i2c_command, ssif_info 504 drivers/char/ipmi/ipmi_ssif.c ssif_info->i2c_data); ssif_info 506 drivers/char/ipmi/ipmi_ssif.c ssif_info->done_handler(ssif_info, result, ssif_info 509 drivers/char/ipmi/ipmi_ssif.c ssif_info->done_handler(ssif_info, 0, ssif_info 510 drivers/char/ipmi/ipmi_ssif.c ssif_info->i2c_data, ssif_info 518 drivers/char/ipmi/ipmi_ssif.c static int ssif_i2c_send(struct ssif_info *ssif_info, ssif_info 523 drivers/char/ipmi/ipmi_ssif.c ssif_info->done_handler = handler; ssif_info 525 drivers/char/ipmi/ipmi_ssif.c ssif_info->i2c_read_write = read_write; ssif_info 526 drivers/char/ipmi/ipmi_ssif.c ssif_info->i2c_command = command; ssif_info 527 drivers/char/ipmi/ipmi_ssif.c ssif_info->i2c_data = data; ssif_info 528 drivers/char/ipmi/ipmi_ssif.c ssif_info->i2c_size = size; ssif_info 529 drivers/char/ipmi/ipmi_ssif.c complete(&ssif_info->wake_thread); ssif_info 534 drivers/char/ipmi/ipmi_ssif.c static void msg_done_handler(struct ssif_info *ssif_info, int result, ssif_info 537 drivers/char/ipmi/ipmi_ssif.c static void start_get(struct ssif_info *ssif_info) ssif_info 541 drivers/char/ipmi/ipmi_ssif.c ssif_info->rtc_us_timer = 0; ssif_info 542 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_pos = 0; ssif_info 544 drivers/char/ipmi/ipmi_ssif.c rv = ssif_i2c_send(ssif_info, msg_done_handler, I2C_SMBUS_READ, ssif_info 546 drivers/char/ipmi/ipmi_ssif.c ssif_info->recv, I2C_SMBUS_BLOCK_DATA); ssif_info 549 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 550 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 553 drivers/char/ipmi/ipmi_ssif.c msg_done_handler(ssif_info, -EIO, NULL, 0); ssif_info 559 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = from_timer(ssif_info, t, retry_timer); ssif_info 563 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->stopping) ssif_info 566 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 567 drivers/char/ipmi/ipmi_ssif.c waiting = ssif_info->waiting_alert; ssif_info 568 drivers/char/ipmi/ipmi_ssif.c ssif_info->waiting_alert = false; ssif_info 569 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 572 drivers/char/ipmi/ipmi_ssif.c start_get(ssif_info); ssif_info 577 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = from_timer(ssif_info, t, watch_timer); ssif_info 580 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->stopping) ssif_info 583 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 584 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->watch_timeout) { ssif_info 585 drivers/char/ipmi/ipmi_ssif.c mod_timer(&ssif_info->watch_timer, ssif_info 586 drivers/char/ipmi/ipmi_ssif.c jiffies + ssif_info->watch_timeout); ssif_info 587 drivers/char/ipmi/ipmi_ssif.c if (SSIF_IDLE(ssif_info)) { ssif_info 588 drivers/char/ipmi/ipmi_ssif.c start_flag_fetch(ssif_info, flags); /* Releases lock */ ssif_info 591 drivers/char/ipmi/ipmi_ssif.c ssif_info->req_flags = true; ssif_info 593 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 599 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = i2c_get_clientdata(client); ssif_info 606 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, alerts); ssif_info 608 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 609 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->waiting_alert) { ssif_info 610 drivers/char/ipmi/ipmi_ssif.c ssif_info->waiting_alert = false; ssif_info 611 drivers/char/ipmi/ipmi_ssif.c del_timer(&ssif_info->retry_timer); ssif_info 613 drivers/char/ipmi/ipmi_ssif.c } else if (ssif_info->curr_msg) { ssif_info 614 drivers/char/ipmi/ipmi_ssif.c ssif_info->got_alert = true; ssif_info 616 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 618 drivers/char/ipmi/ipmi_ssif.c start_get(ssif_info); ssif_info 621 drivers/char/ipmi/ipmi_ssif.c static int start_resend(struct ssif_info *ssif_info); ssif_info 623 drivers/char/ipmi/ipmi_ssif.c static void msg_done_handler(struct ssif_info *ssif_info, int result, ssif_info 636 drivers/char/ipmi/ipmi_ssif.c ssif_info->retries_left--; ssif_info 637 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->retries_left > 0) { ssif_info 638 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, receive_retries); ssif_info 640 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 641 drivers/char/ipmi/ipmi_ssif.c ssif_info->waiting_alert = true; ssif_info 642 drivers/char/ipmi/ipmi_ssif.c ssif_info->rtc_us_timer = SSIF_MSG_USEC; ssif_info 643 drivers/char/ipmi/ipmi_ssif.c if (!ssif_info->stopping) ssif_info 644 drivers/char/ipmi/ipmi_ssif.c mod_timer(&ssif_info->retry_timer, ssif_info 646 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 650 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, receive_errors); ssif_info 652 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 653 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 659 drivers/char/ipmi/ipmi_ssif.c if ((len > 1) && (ssif_info->multi_pos == 0) ssif_info 664 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, received_message_parts); ssif_info 670 drivers/char/ipmi/ipmi_ssif.c ssif_info->data[i] = data[i]; ssif_info 671 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_len = len; ssif_info 672 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_pos = 1; ssif_info 674 drivers/char/ipmi/ipmi_ssif.c rv = ssif_i2c_send(ssif_info, msg_done_handler, I2C_SMBUS_READ, ssif_info 676 drivers/char/ipmi/ipmi_ssif.c ssif_info->recv, I2C_SMBUS_BLOCK_DATA); ssif_info 678 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 679 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 685 drivers/char/ipmi/ipmi_ssif.c } else if (ssif_info->multi_pos) { ssif_info 692 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 693 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 706 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 707 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 713 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->multi_len + len > IPMI_MAX_MSG_LENGTH) { ssif_info 716 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 717 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 724 drivers/char/ipmi/ipmi_ssif.c ssif_info->data[i + ssif_info->multi_len] = data[i]; ssif_info 725 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_len += len; ssif_info 728 drivers/char/ipmi/ipmi_ssif.c len = ssif_info->multi_len; ssif_info 729 drivers/char/ipmi/ipmi_ssif.c data = ssif_info->data; ssif_info 730 drivers/char/ipmi/ipmi_ssif.c } else if (blocknum + 1 != ssif_info->multi_pos) { ssif_info 736 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 737 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 739 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_pos - 1, blocknum); ssif_info 742 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, received_message_parts); ssif_info 744 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_pos++; ssif_info 746 drivers/char/ipmi/ipmi_ssif.c rv = ssif_i2c_send(ssif_info, msg_done_handler, ssif_info 749 drivers/char/ipmi/ipmi_ssif.c ssif_info->recv, ssif_info 752 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 753 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 764 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, receive_errors); ssif_info 766 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, received_messages); ssif_info 767 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, received_message_parts); ssif_info 770 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_STATE) ssif_info 771 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 773 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state, result); ssif_info 775 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 776 drivers/char/ipmi/ipmi_ssif.c msg = ssif_info->curr_msg; ssif_info 786 drivers/char/ipmi/ipmi_ssif.c ssif_info->curr_msg = NULL; ssif_info 789 drivers/char/ipmi/ipmi_ssif.c switch (ssif_info->ssif_state) { ssif_info 791 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 796 drivers/char/ipmi/ipmi_ssif.c return_hosed_msg(ssif_info, msg); ssif_info 798 drivers/char/ipmi/ipmi_ssif.c deliver_recv_msg(ssif_info, msg); ssif_info 808 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_NORMAL; ssif_info 809 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 810 drivers/char/ipmi/ipmi_ssif.c dev_warn(&ssif_info->client->dev, ssif_info 819 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 820 drivers/char/ipmi/ipmi_ssif.c dev_warn(&ssif_info->client->dev, ssif_info 824 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, flag_fetches); ssif_info 825 drivers/char/ipmi/ipmi_ssif.c ssif_info->msg_flags = data[3]; ssif_info 826 drivers/char/ipmi/ipmi_ssif.c handle_flags(ssif_info, flags); ssif_info 834 drivers/char/ipmi/ipmi_ssif.c dev_warn(&ssif_info->client->dev, ssif_info 839 drivers/char/ipmi/ipmi_ssif.c dev_warn(&ssif_info->client->dev, ssif_info 843 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_NORMAL; ssif_info 844 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 853 drivers/char/ipmi/ipmi_ssif.c ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL; ssif_info 854 drivers/char/ipmi/ipmi_ssif.c handle_flags(ssif_info, flags); ssif_info 857 drivers/char/ipmi/ipmi_ssif.c dev_warn(&ssif_info->client->dev, ssif_info 862 drivers/char/ipmi/ipmi_ssif.c ssif_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL; ssif_info 863 drivers/char/ipmi/ipmi_ssif.c handle_flags(ssif_info, flags); ssif_info 865 drivers/char/ipmi/ipmi_ssif.c handle_flags(ssif_info, flags); ssif_info 866 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, events); ssif_info 867 drivers/char/ipmi/ipmi_ssif.c deliver_recv_msg(ssif_info, msg); ssif_info 877 drivers/char/ipmi/ipmi_ssif.c ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL; ssif_info 878 drivers/char/ipmi/ipmi_ssif.c handle_flags(ssif_info, flags); ssif_info 881 drivers/char/ipmi/ipmi_ssif.c dev_warn(&ssif_info->client->dev, ssif_info 887 drivers/char/ipmi/ipmi_ssif.c ssif_info->msg_flags &= ~RECEIVE_MSG_AVAIL; ssif_info 888 drivers/char/ipmi/ipmi_ssif.c handle_flags(ssif_info, flags); ssif_info 890 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, incoming_messages); ssif_info 891 drivers/char/ipmi/ipmi_ssif.c handle_flags(ssif_info, flags); ssif_info 892 drivers/char/ipmi/ipmi_ssif.c deliver_recv_msg(ssif_info, msg); ssif_info 897 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 898 drivers/char/ipmi/ipmi_ssif.c if (SSIF_IDLE(ssif_info) && !ssif_info->stopping) { ssif_info 899 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->req_events) ssif_info 900 drivers/char/ipmi/ipmi_ssif.c start_event_fetch(ssif_info, flags); ssif_info 901 drivers/char/ipmi/ipmi_ssif.c else if (ssif_info->req_flags) ssif_info 902 drivers/char/ipmi/ipmi_ssif.c start_flag_fetch(ssif_info, flags); ssif_info 904 drivers/char/ipmi/ipmi_ssif.c start_next_msg(ssif_info, flags); ssif_info 906 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 908 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_STATE) ssif_info 909 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 910 drivers/char/ipmi/ipmi_ssif.c "DONE 2: state = %d.\n", ssif_info->ssif_state); ssif_info 913 drivers/char/ipmi/ipmi_ssif.c static void msg_written_handler(struct ssif_info *ssif_info, int result, ssif_info 920 drivers/char/ipmi/ipmi_ssif.c ssif_info->retries_left--; ssif_info 921 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->retries_left > 0) { ssif_info 922 drivers/char/ipmi/ipmi_ssif.c if (!start_resend(ssif_info)) { ssif_info 923 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, send_retries); ssif_info 927 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, send_errors); ssif_info 929 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 930 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 932 drivers/char/ipmi/ipmi_ssif.c msg_done_handler(ssif_info, -EIO, NULL, 0); ssif_info 936 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, send_errors); ssif_info 942 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 943 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 946 drivers/char/ipmi/ipmi_ssif.c msg_done_handler(ssif_info, result, NULL, 0); ssif_info 950 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->multi_data) { ssif_info 960 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, sent_messages_parts); ssif_info 962 drivers/char/ipmi/ipmi_ssif.c left = ssif_info->multi_len - ssif_info->multi_pos; ssif_info 967 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_data[ssif_info->multi_pos] = to_write; ssif_info 968 drivers/char/ipmi/ipmi_ssif.c data_to_send = ssif_info->multi_data + ssif_info->multi_pos; ssif_info 969 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_pos += to_write; ssif_info 971 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->cmd8_works) { ssif_info 974 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_data = NULL; ssif_info 977 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_data = NULL; ssif_info 980 drivers/char/ipmi/ipmi_ssif.c rv = ssif_i2c_send(ssif_info, msg_written_handler, ssif_info 985 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, send_errors); ssif_info 987 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_MSG) ssif_info 988 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 990 drivers/char/ipmi/ipmi_ssif.c msg_done_handler(ssif_info, -EIO, NULL, 0); ssif_info 996 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, sent_messages); ssif_info 997 drivers/char/ipmi/ipmi_ssif.c ssif_inc_stat(ssif_info, sent_messages_parts); ssif_info 999 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 1000 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->got_alert) { ssif_info 1002 drivers/char/ipmi/ipmi_ssif.c ssif_info->got_alert = false; ssif_info 1003 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 1004 drivers/char/ipmi/ipmi_ssif.c start_get(ssif_info); ssif_info 1007 drivers/char/ipmi/ipmi_ssif.c ssif_info->waiting_alert = true; ssif_info 1008 drivers/char/ipmi/ipmi_ssif.c ssif_info->retries_left = SSIF_RECV_RETRIES; ssif_info 1009 drivers/char/ipmi/ipmi_ssif.c ssif_info->rtc_us_timer = SSIF_MSG_PART_USEC; ssif_info 1010 drivers/char/ipmi/ipmi_ssif.c if (!ssif_info->stopping) ssif_info 1011 drivers/char/ipmi/ipmi_ssif.c mod_timer(&ssif_info->retry_timer, ssif_info 1013 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 1018 drivers/char/ipmi/ipmi_ssif.c static int start_resend(struct ssif_info *ssif_info) ssif_info 1023 drivers/char/ipmi/ipmi_ssif.c ssif_info->got_alert = false; ssif_info 1025 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->data_len > 32) { ssif_info 1027 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_data = ssif_info->data; ssif_info 1028 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_len = ssif_info->data_len; ssif_info 1034 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_pos = 32; ssif_info 1035 drivers/char/ipmi/ipmi_ssif.c ssif_info->data[0] = 32; ssif_info 1037 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_data = NULL; ssif_info 1039 drivers/char/ipmi/ipmi_ssif.c ssif_info->data[0] = ssif_info->data_len; ssif_info 1042 drivers/char/ipmi/ipmi_ssif.c rv = ssif_i2c_send(ssif_info, msg_written_handler, I2C_SMBUS_WRITE, ssif_info 1043 drivers/char/ipmi/ipmi_ssif.c command, ssif_info->data, I2C_SMBUS_BLOCK_DATA); ssif_info 1044 drivers/char/ipmi/ipmi_ssif.c if (rv && (ssif_info->ssif_debug & SSIF_DEBUG_MSG)) ssif_info 1045 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 1050 drivers/char/ipmi/ipmi_ssif.c static int start_send(struct ssif_info *ssif_info, ssif_info 1056 drivers/char/ipmi/ipmi_ssif.c if (len > ssif_info->max_xmit_msg_size) ssif_info 1059 drivers/char/ipmi/ipmi_ssif.c ssif_info->retries_left = SSIF_SEND_RETRIES; ssif_info 1060 drivers/char/ipmi/ipmi_ssif.c memcpy(ssif_info->data + 1, data, len); ssif_info 1061 drivers/char/ipmi/ipmi_ssif.c ssif_info->data_len = len; ssif_info 1062 drivers/char/ipmi/ipmi_ssif.c return start_resend(ssif_info); ssif_info 1066 drivers/char/ipmi/ipmi_ssif.c static void start_next_msg(struct ssif_info *ssif_info, unsigned long *flags) ssif_info 1072 drivers/char/ipmi/ipmi_ssif.c if (!SSIF_IDLE(ssif_info)) { ssif_info 1073 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 1077 drivers/char/ipmi/ipmi_ssif.c if (!ssif_info->waiting_msg) { ssif_info 1078 drivers/char/ipmi/ipmi_ssif.c ssif_info->curr_msg = NULL; ssif_info 1079 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 1083 drivers/char/ipmi/ipmi_ssif.c ssif_info->curr_msg = ssif_info->waiting_msg; ssif_info 1084 drivers/char/ipmi/ipmi_ssif.c ssif_info->waiting_msg = NULL; ssif_info 1085 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 1086 drivers/char/ipmi/ipmi_ssif.c rv = start_send(ssif_info, ssif_info 1087 drivers/char/ipmi/ipmi_ssif.c ssif_info->curr_msg->data, ssif_info 1088 drivers/char/ipmi/ipmi_ssif.c ssif_info->curr_msg->data_size); ssif_info 1090 drivers/char/ipmi/ipmi_ssif.c msg = ssif_info->curr_msg; ssif_info 1091 drivers/char/ipmi/ipmi_ssif.c ssif_info->curr_msg = NULL; ssif_info 1092 drivers/char/ipmi/ipmi_ssif.c return_hosed_msg(ssif_info, msg); ssif_info 1093 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 1102 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = (struct ssif_info *) send_info; ssif_info 1105 drivers/char/ipmi/ipmi_ssif.c BUG_ON(ssif_info->waiting_msg); ssif_info 1106 drivers/char/ipmi/ipmi_ssif.c ssif_info->waiting_msg = msg; ssif_info 1108 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 1109 drivers/char/ipmi/ipmi_ssif.c start_next_msg(ssif_info, flags); ssif_info 1111 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->ssif_debug & SSIF_DEBUG_TIMING) { ssif_info 1115 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 1124 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = send_info; ssif_info 1126 drivers/char/ipmi/ipmi_ssif.c data->addr_src = ssif_info->addr_source; ssif_info 1127 drivers/char/ipmi/ipmi_ssif.c data->dev = &ssif_info->client->dev; ssif_info 1128 drivers/char/ipmi/ipmi_ssif.c data->addr_info = ssif_info->addr_info; ssif_info 1139 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = (struct ssif_info *) send_info; ssif_info 1142 drivers/char/ipmi/ipmi_ssif.c if (!ssif_info->has_event_buffer) ssif_info 1145 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 1146 drivers/char/ipmi/ipmi_ssif.c ssif_info->req_events = true; ssif_info 1147 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 1156 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = (struct ssif_info *) send_info; ssif_info 1165 drivers/char/ipmi/ipmi_ssif.c flags = ipmi_ssif_lock_cond(ssif_info, &oflags); ssif_info 1166 drivers/char/ipmi/ipmi_ssif.c if (timeout != ssif_info->watch_timeout) { ssif_info 1167 drivers/char/ipmi/ipmi_ssif.c ssif_info->watch_timeout = timeout; ssif_info 1168 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->watch_timeout) ssif_info 1169 drivers/char/ipmi/ipmi_ssif.c mod_timer(&ssif_info->watch_timer, ssif_info 1170 drivers/char/ipmi/ipmi_ssif.c jiffies + ssif_info->watch_timeout); ssif_info 1172 drivers/char/ipmi/ipmi_ssif.c ipmi_ssif_unlock_cond(ssif_info, flags); ssif_info 1178 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = send_info; ssif_info 1180 drivers/char/ipmi/ipmi_ssif.c ssif_info->intf = intf; ssif_info 1237 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = dev_get_drvdata(dev); \ ssif_info 1239 drivers/char/ipmi/ipmi_ssif.c return snprintf(buf, 10, "%u\n", ssif_get_stat(ssif_info, name));\ ssif_info 1289 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = send_info; ssif_info 1291 drivers/char/ipmi/ipmi_ssif.c device_remove_group(&ssif_info->client->dev, &ipmi_ssif_dev_attr_group); ssif_info 1292 drivers/char/ipmi/ipmi_ssif.c dev_set_drvdata(&ssif_info->client->dev, NULL); ssif_info 1295 drivers/char/ipmi/ipmi_ssif.c while (ssif_info->ssif_state != SSIF_NORMAL) ssif_info 1298 drivers/char/ipmi/ipmi_ssif.c ssif_info->stopping = true; ssif_info 1299 drivers/char/ipmi/ipmi_ssif.c del_timer_sync(&ssif_info->watch_timer); ssif_info 1300 drivers/char/ipmi/ipmi_ssif.c del_timer_sync(&ssif_info->retry_timer); ssif_info 1301 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->thread) { ssif_info 1302 drivers/char/ipmi/ipmi_ssif.c complete(&ssif_info->wake_thread); ssif_info 1303 drivers/char/ipmi/ipmi_ssif.c kthread_stop(ssif_info->thread); ssif_info 1309 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = i2c_get_clientdata(client); ssif_info 1312 drivers/char/ipmi/ipmi_ssif.c if (!ssif_info) ssif_info 1319 drivers/char/ipmi/ipmi_ssif.c ipmi_unregister_smi(ssif_info->intf); ssif_info 1328 drivers/char/ipmi/ipmi_ssif.c kfree(ssif_info); ssif_info 1464 drivers/char/ipmi/ipmi_ssif.c static bool check_acpi(struct ssif_info *ssif_info, struct device *dev) ssif_info 1471 drivers/char/ipmi/ipmi_ssif.c ssif_info->addr_source = SI_ACPI; ssif_info 1472 drivers/char/ipmi/ipmi_ssif.c ssif_info->addr_info.acpi_info.acpi_handle = acpi_handle; ssif_info 1524 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info, ssif_info 1531 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->max_xmit_msg_size <= 32) ssif_info 1534 drivers/char/ipmi/ipmi_ssif.c do_middle = ssif_info->max_xmit_msg_size > 63; ssif_info 1578 drivers/char/ipmi/ipmi_ssif.c ssif_info->cmd8_works = true; ssif_info 1598 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->max_xmit_msg_size > 63) ssif_info 1599 drivers/char/ipmi/ipmi_ssif.c ssif_info->max_xmit_msg_size = 63; ssif_info 1603 drivers/char/ipmi/ipmi_ssif.c ssif_info->max_xmit_msg_size = 32; ssif_info 1615 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info = i2c_get_clientdata(client); ssif_info 1617 drivers/char/ipmi/ipmi_ssif.c ipmi_unregister_smi(ssif_info->intf); ssif_info 1618 drivers/char/ipmi/ipmi_ssif.c kfree(ssif_info); ssif_info 1642 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info) ssif_info 1654 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->addr_source == SI_ACPI && ssif_info 1671 drivers/char/ipmi/ipmi_ssif.c struct ssif_info *ssif_info; ssif_info 1685 drivers/char/ipmi/ipmi_ssif.c ssif_info = kzalloc(sizeof(*ssif_info), GFP_KERNEL); ssif_info 1686 drivers/char/ipmi/ipmi_ssif.c if (!ssif_info) { ssif_info 1692 drivers/char/ipmi/ipmi_ssif.c if (!check_acpi(ssif_info, &client->dev)) { ssif_info 1697 drivers/char/ipmi/ipmi_ssif.c ssif_info->addr_source = SI_HOTMOD; ssif_info 1699 drivers/char/ipmi/ipmi_ssif.c ssif_info->addr_source = addr_info->addr_src; ssif_info 1700 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_debug = addr_info->debug; ssif_info 1701 drivers/char/ipmi/ipmi_ssif.c ssif_info->addr_info = addr_info->addr_info; ssif_info 1707 drivers/char/ipmi/ipmi_ssif.c rv = ssif_check_and_remove(client, ssif_info); ssif_info 1709 drivers/char/ipmi/ipmi_ssif.c if (!rv && ssif_info->addr_source == SI_ACPI) { ssif_info 1724 drivers/char/ipmi/ipmi_ssif.c ipmi_addr_src_to_str(ssif_info->addr_source), ssif_info 1727 drivers/char/ipmi/ipmi_ssif.c ssif_info->client = client; ssif_info 1728 drivers/char/ipmi/ipmi_ssif.c i2c_set_clientdata(client, ssif_info); ssif_info 1738 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 1744 drivers/char/ipmi/ipmi_ssif.c ssif_info->max_xmit_msg_size = resp[5]; ssif_info 1745 drivers/char/ipmi/ipmi_ssif.c ssif_info->max_recv_msg_size = resp[6]; ssif_info 1746 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_support = (resp[4] >> 6) & 0x3; ssif_info 1747 drivers/char/ipmi/ipmi_ssif.c ssif_info->supports_pec = (resp[4] >> 3) & 0x1; ssif_info 1750 drivers/char/ipmi/ipmi_ssif.c switch (ssif_info->multi_support) { ssif_info 1752 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->max_xmit_msg_size > 32) ssif_info 1753 drivers/char/ipmi/ipmi_ssif.c ssif_info->max_xmit_msg_size = 32; ssif_info 1754 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->max_recv_msg_size > 32) ssif_info 1755 drivers/char/ipmi/ipmi_ssif.c ssif_info->max_recv_msg_size = 32; ssif_info 1759 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->max_xmit_msg_size > 63) ssif_info 1760 drivers/char/ipmi/ipmi_ssif.c ssif_info->max_xmit_msg_size = 63; ssif_info 1761 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->max_recv_msg_size > 62) ssif_info 1762 drivers/char/ipmi/ipmi_ssif.c ssif_info->max_recv_msg_size = 62; ssif_info 1776 drivers/char/ipmi/ipmi_ssif.c dev_info(&ssif_info->client->dev, ssif_info 1780 drivers/char/ipmi/ipmi_ssif.c ssif_info->max_xmit_msg_size = 32; ssif_info 1781 drivers/char/ipmi/ipmi_ssif.c ssif_info->max_recv_msg_size = 32; ssif_info 1782 drivers/char/ipmi/ipmi_ssif.c ssif_info->multi_support = SSIF_NO_MULTI; ssif_info 1783 drivers/char/ipmi/ipmi_ssif.c ssif_info->supports_pec = 0; ssif_info 1786 drivers/char/ipmi/ipmi_ssif.c test_multipart_messages(client, ssif_info, resp); ssif_info 1794 drivers/char/ipmi/ipmi_ssif.c dev_warn(&ssif_info->client->dev, ssif_info 1803 drivers/char/ipmi/ipmi_ssif.c dev_warn(&ssif_info->client->dev, ssif_info 1810 drivers/char/ipmi/ipmi_ssif.c ssif_info->global_enables = resp[3]; ssif_info 1813 drivers/char/ipmi/ipmi_ssif.c ssif_info->has_event_buffer = true; ssif_info 1820 drivers/char/ipmi/ipmi_ssif.c msg[2] = ssif_info->global_enables | IPMI_BMC_EVT_MSG_BUFF; ssif_info 1823 drivers/char/ipmi/ipmi_ssif.c dev_warn(&ssif_info->client->dev, ssif_info 1832 drivers/char/ipmi/ipmi_ssif.c ssif_info->has_event_buffer = true; ssif_info 1833 drivers/char/ipmi/ipmi_ssif.c ssif_info->global_enables |= IPMI_BMC_EVT_MSG_BUFF; ssif_info 1842 drivers/char/ipmi/ipmi_ssif.c msg[2] = ssif_info->global_enables | IPMI_BMC_RCV_MSG_INTR; ssif_info 1845 drivers/char/ipmi/ipmi_ssif.c dev_warn(&ssif_info->client->dev, ssif_info 1854 drivers/char/ipmi/ipmi_ssif.c ssif_info->supports_alert = true; ssif_info 1855 drivers/char/ipmi/ipmi_ssif.c ssif_info->global_enables |= IPMI_BMC_RCV_MSG_INTR; ssif_info 1860 drivers/char/ipmi/ipmi_ssif.c dev_dbg(&ssif_info->client->dev, ssif_info 1865 drivers/char/ipmi/ipmi_ssif.c spin_lock_init(&ssif_info->lock); ssif_info 1866 drivers/char/ipmi/ipmi_ssif.c ssif_info->ssif_state = SSIF_NORMAL; ssif_info 1867 drivers/char/ipmi/ipmi_ssif.c timer_setup(&ssif_info->retry_timer, retry_timeout, 0); ssif_info 1868 drivers/char/ipmi/ipmi_ssif.c timer_setup(&ssif_info->watch_timer, watch_timeout, 0); ssif_info 1871 drivers/char/ipmi/ipmi_ssif.c atomic_set(&ssif_info->stats[i], 0); ssif_info 1873 drivers/char/ipmi/ipmi_ssif.c if (ssif_info->supports_pec) ssif_info 1874 drivers/char/ipmi/ipmi_ssif.c ssif_info->client->flags |= I2C_CLIENT_PEC; ssif_info 1876 drivers/char/ipmi/ipmi_ssif.c ssif_info->handlers.owner = THIS_MODULE; ssif_info 1877 drivers/char/ipmi/ipmi_ssif.c ssif_info->handlers.start_processing = ssif_start_processing; ssif_info 1878 drivers/char/ipmi/ipmi_ssif.c ssif_info->handlers.shutdown = shutdown_ssif; ssif_info 1879 drivers/char/ipmi/ipmi_ssif.c ssif_info->handlers.get_smi_info = get_smi_info; ssif_info 1880 drivers/char/ipmi/ipmi_ssif.c ssif_info->handlers.sender = sender; ssif_info 1881 drivers/char/ipmi/ipmi_ssif.c ssif_info->handlers.request_events = request_events; ssif_info 1882 drivers/char/ipmi/ipmi_ssif.c ssif_info->handlers.set_need_watch = ssif_set_need_watch; ssif_info 1887 drivers/char/ipmi/ipmi_ssif.c thread_num = ((i2c_adapter_id(ssif_info->client->adapter) ssif_info 1889 drivers/char/ipmi/ipmi_ssif.c ssif_info->client->addr); ssif_info 1890 drivers/char/ipmi/ipmi_ssif.c init_completion(&ssif_info->wake_thread); ssif_info 1891 drivers/char/ipmi/ipmi_ssif.c ssif_info->thread = kthread_run(ipmi_ssif_thread, ssif_info, ssif_info 1893 drivers/char/ipmi/ipmi_ssif.c if (IS_ERR(ssif_info->thread)) { ssif_info 1894 drivers/char/ipmi/ipmi_ssif.c rv = PTR_ERR(ssif_info->thread); ssif_info 1895 drivers/char/ipmi/ipmi_ssif.c dev_notice(&ssif_info->client->dev, ssif_info 1902 drivers/char/ipmi/ipmi_ssif.c dev_set_drvdata(&ssif_info->client->dev, ssif_info); ssif_info 1903 drivers/char/ipmi/ipmi_ssif.c rv = device_add_group(&ssif_info->client->dev, ssif_info 1906 drivers/char/ipmi/ipmi_ssif.c dev_err(&ssif_info->client->dev, ssif_info 1912 drivers/char/ipmi/ipmi_ssif.c rv = ipmi_register_smi(&ssif_info->handlers, ssif_info 1913 drivers/char/ipmi/ipmi_ssif.c ssif_info, ssif_info 1914 drivers/char/ipmi/ipmi_ssif.c &ssif_info->client->dev, ssif_info 1917 drivers/char/ipmi/ipmi_ssif.c dev_err(&ssif_info->client->dev, ssif_info 1927 drivers/char/ipmi/ipmi_ssif.c dev_err(&ssif_info->client->dev, ssif_info 1929 drivers/char/ipmi/ipmi_ssif.c kfree(ssif_info); ssif_info 1936 drivers/char/ipmi/ipmi_ssif.c device_remove_group(&ssif_info->client->dev, &ipmi_ssif_dev_attr_group); ssif_info 1937 drivers/char/ipmi/ipmi_ssif.c dev_set_drvdata(&ssif_info->client->dev, NULL);