Lines Matching refs:smi_info
162 struct smi_info { struct
178 int (*io_setup)(struct smi_info *info); argument
179 void (*io_cleanup)(struct smi_info *info); argument
180 int (*irq_setup)(struct smi_info *info); argument
181 void (*irq_cleanup)(struct smi_info *info); argument
184 void (*addr_source_cleanup)(struct smi_info *info); argument
192 int (*oem_data_avail_handler)(struct smi_info *smi_info); argument
332 static int add_smi(struct smi_info *smi);
333 static int try_smi_init(struct smi_info *smi);
334 static void cleanup_one_si(struct smi_info *to_clean);
355 static void deliver_recv_msg(struct smi_info *smi_info, in deliver_recv_msg() argument
359 if (smi_info->intf) in deliver_recv_msg()
360 ipmi_smi_msg_received(smi_info->intf, msg); in deliver_recv_msg()
365 static void return_hosed_msg(struct smi_info *smi_info, int cCode) in return_hosed_msg() argument
367 struct ipmi_smi_msg *msg = smi_info->curr_msg; in return_hosed_msg()
379 smi_info->curr_msg = NULL; in return_hosed_msg()
380 deliver_recv_msg(smi_info, msg); in return_hosed_msg()
383 static enum si_sm_result start_next_msg(struct smi_info *smi_info) in start_next_msg() argument
387 if (!smi_info->waiting_msg) { in start_next_msg()
388 smi_info->curr_msg = NULL; in start_next_msg()
393 smi_info->curr_msg = smi_info->waiting_msg; in start_next_msg()
394 smi_info->waiting_msg = NULL; in start_next_msg()
397 0, smi_info); in start_next_msg()
402 err = smi_info->handlers->start_transaction( in start_next_msg()
403 smi_info->si_sm, in start_next_msg()
404 smi_info->curr_msg->data, in start_next_msg()
405 smi_info->curr_msg->data_size); in start_next_msg()
407 return_hosed_msg(smi_info, err); in start_next_msg()
415 static void smi_mod_timer(struct smi_info *smi_info, unsigned long new_val) in smi_mod_timer() argument
417 smi_info->last_timeout_jiffies = jiffies; in smi_mod_timer()
418 mod_timer(&smi_info->si_timer, new_val); in smi_mod_timer()
419 smi_info->timer_running = true; in smi_mod_timer()
425 static void start_new_msg(struct smi_info *smi_info, unsigned char *msg, in start_new_msg() argument
428 smi_mod_timer(smi_info, jiffies + SI_TIMEOUT_JIFFIES); in start_new_msg()
430 if (smi_info->thread) in start_new_msg()
431 wake_up_process(smi_info->thread); in start_new_msg()
433 smi_info->handlers->start_transaction(smi_info->si_sm, msg, size); in start_new_msg()
436 static void start_check_enables(struct smi_info *smi_info, bool start_timer) in start_check_enables() argument
444 start_new_msg(smi_info, msg, 2); in start_check_enables()
446 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); in start_check_enables()
447 smi_info->si_state = SI_CHECKING_ENABLES; in start_check_enables()
450 static void start_clear_flags(struct smi_info *smi_info, bool start_timer) in start_clear_flags() argument
460 start_new_msg(smi_info, msg, 3); in start_clear_flags()
462 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 3); in start_clear_flags()
463 smi_info->si_state = SI_CLEARING_FLAGS; in start_clear_flags()
466 static void start_getting_msg_queue(struct smi_info *smi_info) in start_getting_msg_queue() argument
468 smi_info->curr_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2); in start_getting_msg_queue()
469 smi_info->curr_msg->data[1] = IPMI_GET_MSG_CMD; in start_getting_msg_queue()
470 smi_info->curr_msg->data_size = 2; in start_getting_msg_queue()
472 start_new_msg(smi_info, smi_info->curr_msg->data, in start_getting_msg_queue()
473 smi_info->curr_msg->data_size); in start_getting_msg_queue()
474 smi_info->si_state = SI_GETTING_MESSAGES; in start_getting_msg_queue()
477 static void start_getting_events(struct smi_info *smi_info) in start_getting_events() argument
479 smi_info->curr_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2); in start_getting_events()
480 smi_info->curr_msg->data[1] = IPMI_READ_EVENT_MSG_BUFFER_CMD; in start_getting_events()
481 smi_info->curr_msg->data_size = 2; in start_getting_events()
483 start_new_msg(smi_info, smi_info->curr_msg->data, in start_getting_events()
484 smi_info->curr_msg->data_size); in start_getting_events()
485 smi_info->si_state = SI_GETTING_EVENTS; in start_getting_events()
497 static inline bool disable_si_irq(struct smi_info *smi_info, bool start_timer) in disable_si_irq() argument
499 if ((smi_info->irq) && (!smi_info->interrupt_disabled)) { in disable_si_irq()
500 smi_info->interrupt_disabled = true; in disable_si_irq()
501 start_check_enables(smi_info, start_timer); in disable_si_irq()
507 static inline bool enable_si_irq(struct smi_info *smi_info) in enable_si_irq() argument
509 if ((smi_info->irq) && (smi_info->interrupt_disabled)) { in enable_si_irq()
510 smi_info->interrupt_disabled = false; in enable_si_irq()
511 start_check_enables(smi_info, true); in enable_si_irq()
523 static struct ipmi_smi_msg *alloc_msg_handle_irq(struct smi_info *smi_info) in alloc_msg_handle_irq() argument
529 if (!disable_si_irq(smi_info, true)) in alloc_msg_handle_irq()
530 smi_info->si_state = SI_NORMAL; in alloc_msg_handle_irq()
531 } else if (enable_si_irq(smi_info)) { in alloc_msg_handle_irq()
538 static void handle_flags(struct smi_info *smi_info) in handle_flags() argument
541 if (smi_info->msg_flags & WDT_PRE_TIMEOUT_INT) { in handle_flags()
543 smi_inc_stat(smi_info, watchdog_pretimeouts); in handle_flags()
545 start_clear_flags(smi_info, true); in handle_flags()
546 smi_info->msg_flags &= ~WDT_PRE_TIMEOUT_INT; in handle_flags()
547 if (smi_info->intf) in handle_flags()
548 ipmi_smi_watchdog_pretimeout(smi_info->intf); in handle_flags()
549 } else if (smi_info->msg_flags & RECEIVE_MSG_AVAIL) { in handle_flags()
551 smi_info->curr_msg = alloc_msg_handle_irq(smi_info); in handle_flags()
552 if (!smi_info->curr_msg) in handle_flags()
555 start_getting_msg_queue(smi_info); in handle_flags()
556 } else if (smi_info->msg_flags & EVENT_MSG_BUFFER_FULL) { in handle_flags()
558 smi_info->curr_msg = alloc_msg_handle_irq(smi_info); in handle_flags()
559 if (!smi_info->curr_msg) in handle_flags()
562 start_getting_events(smi_info); in handle_flags()
563 } else if (smi_info->msg_flags & OEM_DATA_AVAIL && in handle_flags()
564 smi_info->oem_data_avail_handler) { in handle_flags()
565 if (smi_info->oem_data_avail_handler(smi_info)) in handle_flags()
568 smi_info->si_state = SI_NORMAL; in handle_flags()
577 static u8 current_global_enables(struct smi_info *smi_info, u8 base, in current_global_enables() argument
582 if (smi_info->supports_event_msg_buff) in current_global_enables()
585 if (((smi_info->irq && !smi_info->interrupt_disabled) || in current_global_enables()
586 smi_info->cannot_disable_irq) && in current_global_enables()
587 !smi_info->irq_enable_broken) in current_global_enables()
590 if (smi_info->supports_event_msg_buff && in current_global_enables()
591 smi_info->irq && !smi_info->interrupt_disabled && in current_global_enables()
592 !smi_info->irq_enable_broken) in current_global_enables()
600 static void check_bt_irq(struct smi_info *smi_info, bool irq_on) in check_bt_irq() argument
602 u8 irqstate = smi_info->io.inputb(&smi_info->io, IPMI_BT_INTMASK_REG); in check_bt_irq()
610 smi_info->io.outputb(&smi_info->io, IPMI_BT_INTMASK_REG, in check_bt_irq()
613 smi_info->io.outputb(&smi_info->io, IPMI_BT_INTMASK_REG, 0); in check_bt_irq()
616 static void handle_transaction_done(struct smi_info *smi_info) in handle_transaction_done() argument
621 switch (smi_info->si_state) { in handle_transaction_done()
623 if (!smi_info->curr_msg) in handle_transaction_done()
626 smi_info->curr_msg->rsp_size in handle_transaction_done()
627 = smi_info->handlers->get_result( in handle_transaction_done()
628 smi_info->si_sm, in handle_transaction_done()
629 smi_info->curr_msg->rsp, in handle_transaction_done()
637 msg = smi_info->curr_msg; in handle_transaction_done()
638 smi_info->curr_msg = NULL; in handle_transaction_done()
639 deliver_recv_msg(smi_info, msg); in handle_transaction_done()
648 len = smi_info->handlers->get_result(smi_info->si_sm, msg, 4); in handle_transaction_done()
651 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
657 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
659 smi_info->msg_flags = msg[3]; in handle_transaction_done()
660 handle_flags(smi_info); in handle_transaction_done()
670 smi_info->handlers->get_result(smi_info->si_sm, msg, 3); in handle_transaction_done()
673 dev_warn(smi_info->dev, in handle_transaction_done()
676 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
682 smi_info->curr_msg->rsp_size in handle_transaction_done()
683 = smi_info->handlers->get_result( in handle_transaction_done()
684 smi_info->si_sm, in handle_transaction_done()
685 smi_info->curr_msg->rsp, in handle_transaction_done()
693 msg = smi_info->curr_msg; in handle_transaction_done()
694 smi_info->curr_msg = NULL; in handle_transaction_done()
700 smi_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL; in handle_transaction_done()
701 handle_flags(smi_info); in handle_transaction_done()
703 smi_inc_stat(smi_info, events); in handle_transaction_done()
711 handle_flags(smi_info); in handle_transaction_done()
713 deliver_recv_msg(smi_info, msg); in handle_transaction_done()
720 smi_info->curr_msg->rsp_size in handle_transaction_done()
721 = smi_info->handlers->get_result( in handle_transaction_done()
722 smi_info->si_sm, in handle_transaction_done()
723 smi_info->curr_msg->rsp, in handle_transaction_done()
731 msg = smi_info->curr_msg; in handle_transaction_done()
732 smi_info->curr_msg = NULL; in handle_transaction_done()
738 smi_info->msg_flags &= ~RECEIVE_MSG_AVAIL; in handle_transaction_done()
739 handle_flags(smi_info); in handle_transaction_done()
741 smi_inc_stat(smi_info, incoming_messages); in handle_transaction_done()
749 handle_flags(smi_info); in handle_transaction_done()
751 deliver_recv_msg(smi_info, msg); in handle_transaction_done()
763 smi_info->handlers->get_result(smi_info->si_sm, msg, 4); in handle_transaction_done()
765 dev_warn(smi_info->dev, in handle_transaction_done()
767 dev_warn(smi_info->dev, in handle_transaction_done()
769 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
772 enables = current_global_enables(smi_info, 0, &irq_on); in handle_transaction_done()
773 if (smi_info->si_type == SI_BT) in handle_transaction_done()
775 check_bt_irq(smi_info, irq_on); in handle_transaction_done()
781 smi_info->handlers->start_transaction( in handle_transaction_done()
782 smi_info->si_sm, msg, 3); in handle_transaction_done()
783 smi_info->si_state = SI_SETTING_ENABLES; in handle_transaction_done()
784 } else if (smi_info->supports_event_msg_buff) { in handle_transaction_done()
785 smi_info->curr_msg = ipmi_alloc_smi_msg(); in handle_transaction_done()
786 if (!smi_info->curr_msg) { in handle_transaction_done()
787 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
790 start_getting_msg_queue(smi_info); in handle_transaction_done()
792 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
801 smi_info->handlers->get_result(smi_info->si_sm, msg, 4); in handle_transaction_done()
803 dev_warn(smi_info->dev, in handle_transaction_done()
807 if (smi_info->supports_event_msg_buff) { in handle_transaction_done()
808 smi_info->curr_msg = ipmi_alloc_smi_msg(); in handle_transaction_done()
809 if (!smi_info->curr_msg) { in handle_transaction_done()
810 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
813 start_getting_msg_queue(smi_info); in handle_transaction_done()
815 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
827 static enum si_sm_result smi_event_handler(struct smi_info *smi_info, in smi_event_handler() argument
841 si_sm_result = smi_info->handlers->event(smi_info->si_sm, time); in smi_event_handler()
844 si_sm_result = smi_info->handlers->event(smi_info->si_sm, 0); in smi_event_handler()
847 smi_inc_stat(smi_info, complete_transactions); in smi_event_handler()
849 handle_transaction_done(smi_info); in smi_event_handler()
850 si_sm_result = smi_info->handlers->event(smi_info->si_sm, 0); in smi_event_handler()
852 smi_inc_stat(smi_info, hosed_count); in smi_event_handler()
858 smi_info->si_state = SI_NORMAL; in smi_event_handler()
859 if (smi_info->curr_msg != NULL) { in smi_event_handler()
865 return_hosed_msg(smi_info, IPMI_ERR_UNSPECIFIED); in smi_event_handler()
867 si_sm_result = smi_info->handlers->event(smi_info->si_sm, 0); in smi_event_handler()
874 if (likely(smi_info->intf) && in smi_event_handler()
875 (si_sm_result == SI_SM_ATTN || smi_info->got_attn)) { in smi_event_handler()
878 if (smi_info->si_state != SI_NORMAL) { in smi_event_handler()
883 smi_info->got_attn = true; in smi_event_handler()
885 smi_info->got_attn = false; in smi_event_handler()
886 smi_inc_stat(smi_info, attentions); in smi_event_handler()
898 start_new_msg(smi_info, msg, 2); in smi_event_handler()
899 smi_info->si_state = SI_GETTING_FLAGS; in smi_event_handler()
906 smi_inc_stat(smi_info, idles); in smi_event_handler()
908 si_sm_result = start_next_msg(smi_info); in smi_event_handler()
914 && (atomic_read(&smi_info->req_events))) { in smi_event_handler()
919 atomic_set(&smi_info->req_events, 0); in smi_event_handler()
927 if (smi_info->supports_event_msg_buff || smi_info->irq) { in smi_event_handler()
928 start_check_enables(smi_info, true); in smi_event_handler()
930 smi_info->curr_msg = alloc_msg_handle_irq(smi_info); in smi_event_handler()
931 if (!smi_info->curr_msg) in smi_event_handler()
934 start_getting_events(smi_info); in smi_event_handler()
939 if (si_sm_result == SI_SM_IDLE && smi_info->timer_running) { in smi_event_handler()
941 if (del_timer(&smi_info->si_timer)) in smi_event_handler()
942 smi_info->timer_running = false; in smi_event_handler()
949 static void check_start_timer_thread(struct smi_info *smi_info) in check_start_timer_thread() argument
951 if (smi_info->si_state == SI_NORMAL && smi_info->curr_msg == NULL) { in check_start_timer_thread()
952 smi_mod_timer(smi_info, jiffies + SI_TIMEOUT_JIFFIES); in check_start_timer_thread()
954 if (smi_info->thread) in check_start_timer_thread()
955 wake_up_process(smi_info->thread); in check_start_timer_thread()
957 start_next_msg(smi_info); in check_start_timer_thread()
958 smi_event_handler(smi_info, 0); in check_start_timer_thread()
964 struct smi_info *smi_info = send_info; in flush_messages() local
971 result = smi_event_handler(smi_info, 0); in flush_messages()
974 result = smi_event_handler(smi_info, SI_SHORT_TIMEOUT_USEC); in flush_messages()
981 struct smi_info *smi_info = send_info; in sender() local
986 if (smi_info->run_to_completion) { in sender()
991 smi_info->waiting_msg = msg; in sender()
995 spin_lock_irqsave(&smi_info->si_lock, flags); in sender()
1003 BUG_ON(smi_info->waiting_msg); in sender()
1004 smi_info->waiting_msg = msg; in sender()
1005 check_start_timer_thread(smi_info); in sender()
1006 spin_unlock_irqrestore(&smi_info->si_lock, flags); in sender()
1011 struct smi_info *smi_info = send_info; in set_run_to_completion() local
1013 smi_info->run_to_completion = i_run_to_completion; in set_run_to_completion()
1015 flush_messages(smi_info); in set_run_to_completion()
1033 const struct smi_info *smi_info, in ipmi_thread_busy_wait() argument
1038 if (smi_info->intf_num < num_max_busy_us) in ipmi_thread_busy_wait()
1039 max_busy_us = kipmid_max_busy_us[smi_info->intf_num]; in ipmi_thread_busy_wait()
1069 struct smi_info *smi_info = data; in ipmi_thread() local
1079 spin_lock_irqsave(&(smi_info->si_lock), flags); in ipmi_thread()
1080 smi_result = smi_event_handler(smi_info, 0); in ipmi_thread()
1089 if (smi_result != SI_SM_IDLE && !smi_info->timer_running) in ipmi_thread()
1090 smi_mod_timer(smi_info, jiffies + SI_TIMEOUT_JIFFIES); in ipmi_thread()
1092 spin_unlock_irqrestore(&(smi_info->si_lock), flags); in ipmi_thread()
1093 busy_wait = ipmi_thread_busy_wait(smi_result, smi_info, in ipmi_thread()
1100 if (atomic_read(&smi_info->need_watch)) { in ipmi_thread()
1116 struct smi_info *smi_info = send_info; in poll() local
1118 bool run_to_completion = smi_info->run_to_completion; in poll()
1126 spin_lock_irqsave(&smi_info->si_lock, flags); in poll()
1127 smi_event_handler(smi_info, 10); in poll()
1129 spin_unlock_irqrestore(&smi_info->si_lock, flags); in poll()
1134 struct smi_info *smi_info = send_info; in request_events() local
1136 if (!smi_info->has_event_buffer) in request_events()
1139 atomic_set(&smi_info->req_events, 1); in request_events()
1144 struct smi_info *smi_info = send_info; in set_need_watch() local
1147 atomic_set(&smi_info->need_watch, enable); in set_need_watch()
1148 spin_lock_irqsave(&smi_info->si_lock, flags); in set_need_watch()
1149 check_start_timer_thread(smi_info); in set_need_watch()
1150 spin_unlock_irqrestore(&smi_info->si_lock, flags); in set_need_watch()
1157 struct smi_info *smi_info = (struct smi_info *) data; in smi_timeout() local
1164 spin_lock_irqsave(&(smi_info->si_lock), flags); in smi_timeout()
1168 time_diff = (((long)jiffies_now - (long)smi_info->last_timeout_jiffies) in smi_timeout()
1170 smi_result = smi_event_handler(smi_info, time_diff); in smi_timeout()
1172 if ((smi_info->irq) && (!smi_info->interrupt_disabled)) { in smi_timeout()
1175 smi_inc_stat(smi_info, long_timeouts); in smi_timeout()
1184 smi_inc_stat(smi_info, short_timeouts); in smi_timeout()
1187 smi_inc_stat(smi_info, long_timeouts); in smi_timeout()
1193 smi_mod_timer(smi_info, timeout); in smi_timeout()
1195 smi_info->timer_running = false; in smi_timeout()
1196 spin_unlock_irqrestore(&(smi_info->si_lock), flags); in smi_timeout()
1201 struct smi_info *smi_info = data; in si_irq_handler() local
1204 spin_lock_irqsave(&(smi_info->si_lock), flags); in si_irq_handler()
1206 smi_inc_stat(smi_info, interrupts); in si_irq_handler()
1210 smi_event_handler(smi_info, 0); in si_irq_handler()
1211 spin_unlock_irqrestore(&(smi_info->si_lock), flags); in si_irq_handler()
1217 struct smi_info *smi_info = data; in si_bt_irq_handler() local
1219 smi_info->io.outputb(&smi_info->io, IPMI_BT_INTMASK_REG, in si_bt_irq_handler()
1228 struct smi_info *new_smi = send_info; in smi_start_processing()
1270 struct smi_info *smi = send_info; in get_smi_info()
1282 struct smi_info *smi_info = send_info; in set_maintenance_mode() local
1285 atomic_set(&smi_info->req_events, 0); in set_maintenance_mode()
1433 static void std_irq_cleanup(struct smi_info *info) in std_irq_cleanup()
1441 static int std_irq_setup(struct smi_info *info) in std_irq_setup()
1522 static void port_cleanup(struct smi_info *info) in port_cleanup()
1534 static int port_setup(struct smi_info *info) in port_setup()
1639 static void mem_cleanup(struct smi_info *info) in mem_cleanup()
1654 static int mem_setup(struct smi_info *info) in mem_setup()
1794 static struct smi_info *smi_info_alloc(void) in smi_info_alloc()
1796 struct smi_info *info = kzalloc(sizeof(*info), GFP_KERNEL); in smi_info_alloc()
1819 struct smi_info *info; in hotmod_handler()
1957 struct smi_info *e, *tmp_e; in hotmod_handler()
1981 struct smi_info *info; in hardcode_find_bmc()
2065 struct smi_info *smi_info = context; in ipmi_acpi_gpe() local
2068 spin_lock_irqsave(&(smi_info->si_lock), flags); in ipmi_acpi_gpe()
2070 smi_inc_stat(smi_info, interrupts); in ipmi_acpi_gpe()
2074 smi_event_handler(smi_info, 0); in ipmi_acpi_gpe()
2075 spin_unlock_irqrestore(&(smi_info->si_lock), flags); in ipmi_acpi_gpe()
2080 static void acpi_gpe_irq_cleanup(struct smi_info *info) in acpi_gpe_irq_cleanup()
2088 static int acpi_gpe_irq_setup(struct smi_info *info) in acpi_gpe_irq_setup()
2160 struct smi_info *info; in try_init_spmi()
2343 struct smi_info *info; in try_init_dmi()
2438 static void ipmi_pci_cleanup(struct smi_info *info) in ipmi_pci_cleanup()
2445 static int ipmi_pci_probe_regspacing(struct smi_info *info) in ipmi_pci_probe_regspacing()
2482 struct smi_info *info; in ipmi_pci_probe()
2555 struct smi_info *info = pci_get_drvdata(pdev); in ipmi_pci_remove()
2590 struct smi_info *info; in of_ipmi_probe()
2683 struct smi_info *info; in acpi_ipmi_probe()
2812 struct smi_info *info = dev_get_drvdata(&dev->dev); in ipmi_remove()
2831 struct smi_info *info; in ipmi_parisc_probe()
2886 static int wait_for_msg_done(struct smi_info *smi_info) in wait_for_msg_done() argument
2890 smi_result = smi_info->handlers->event(smi_info->si_sm, 0); in wait_for_msg_done()
2895 smi_result = smi_info->handlers->event( in wait_for_msg_done()
2896 smi_info->si_sm, jiffies_to_usecs(1)); in wait_for_msg_done()
2898 smi_result = smi_info->handlers->event( in wait_for_msg_done()
2899 smi_info->si_sm, 0); in wait_for_msg_done()
2913 static int try_get_dev_id(struct smi_info *smi_info) in try_get_dev_id() argument
2930 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); in try_get_dev_id()
2932 rv = wait_for_msg_done(smi_info); in try_get_dev_id()
2936 resp_len = smi_info->handlers->get_result(smi_info->si_sm, in try_get_dev_id()
2940 rv = ipmi_demangle_device_id(resp, resp_len, &smi_info->device_id); in try_get_dev_id()
2947 static int get_global_enables(struct smi_info *smi_info, u8 *enables) in get_global_enables() argument
2960 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); in get_global_enables()
2962 rv = wait_for_msg_done(smi_info); in get_global_enables()
2964 dev_warn(smi_info->dev, in get_global_enables()
2970 resp_len = smi_info->handlers->get_result(smi_info->si_sm, in get_global_enables()
2977 dev_warn(smi_info->dev, in get_global_enables()
2994 static int set_global_enables(struct smi_info *smi_info, u8 enables) in set_global_enables() argument
3008 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 3); in set_global_enables()
3010 rv = wait_for_msg_done(smi_info); in set_global_enables()
3012 dev_warn(smi_info->dev, in set_global_enables()
3018 resp_len = smi_info->handlers->get_result(smi_info->si_sm, in set_global_enables()
3024 dev_warn(smi_info->dev, in set_global_enables()
3044 static void check_clr_rcv_irq(struct smi_info *smi_info) in check_clr_rcv_irq() argument
3049 rv = get_global_enables(smi_info, &enables); in check_clr_rcv_irq()
3056 rv = set_global_enables(smi_info, enables); in check_clr_rcv_irq()
3060 dev_err(smi_info->dev, in check_clr_rcv_irq()
3070 dev_warn(smi_info->dev, in check_clr_rcv_irq()
3072 smi_info->cannot_disable_irq = true; in check_clr_rcv_irq()
3081 static void check_set_rcv_irq(struct smi_info *smi_info) in check_set_rcv_irq() argument
3086 if (!smi_info->irq) in check_set_rcv_irq()
3089 rv = get_global_enables(smi_info, &enables); in check_set_rcv_irq()
3092 rv = set_global_enables(smi_info, enables); in check_set_rcv_irq()
3096 dev_err(smi_info->dev, in check_set_rcv_irq()
3106 dev_warn(smi_info->dev, in check_set_rcv_irq()
3108 smi_info->cannot_disable_irq = true; in check_set_rcv_irq()
3109 smi_info->irq_enable_broken = true; in check_set_rcv_irq()
3113 static int try_enable_event_buffer(struct smi_info *smi_info) in try_enable_event_buffer() argument
3126 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); in try_enable_event_buffer()
3128 rv = wait_for_msg_done(smi_info); in try_enable_event_buffer()
3136 resp_len = smi_info->handlers->get_result(smi_info->si_sm, in try_enable_event_buffer()
3151 smi_info->supports_event_msg_buff = true; in try_enable_event_buffer()
3158 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 3); in try_enable_event_buffer()
3160 rv = wait_for_msg_done(smi_info); in try_enable_event_buffer()
3168 resp_len = smi_info->handlers->get_result(smi_info->si_sm, in try_enable_event_buffer()
3187 smi_info->supports_event_msg_buff = true; in try_enable_event_buffer()
3196 struct smi_info *smi = m->private; in smi_type_proc_show()
3217 struct smi_info *smi = m->private; in smi_si_stats_proc_show()
3260 struct smi_info *smi = m->private; in smi_params_proc_show()
3295 static int oem_data_avail_to_receive_msg_avail(struct smi_info *smi_info) in oem_data_avail_to_receive_msg_avail() argument
3297 smi_info->msg_flags = ((smi_info->msg_flags & ~OEM_DATA_AVAIL) | in oem_data_avail_to_receive_msg_avail()
3331 static void setup_dell_poweredge_oem_data_handler(struct smi_info *smi_info) in setup_dell_poweredge_oem_data_handler() argument
3333 struct ipmi_device_id *id = &smi_info->device_id; in setup_dell_poweredge_oem_data_handler()
3338 smi_info->oem_data_avail_handler = in setup_dell_poweredge_oem_data_handler()
3343 smi_info->oem_data_avail_handler = in setup_dell_poweredge_oem_data_handler()
3350 static void return_hosed_msg_badsize(struct smi_info *smi_info) in return_hosed_msg_badsize() argument
3352 struct ipmi_smi_msg *msg = smi_info->curr_msg; in return_hosed_msg_badsize()
3359 smi_info->curr_msg = NULL; in return_hosed_msg_badsize()
3360 deliver_recv_msg(smi_info, msg); in return_hosed_msg_badsize()
3380 struct smi_info *smi_info = in; in dell_poweredge_bt_xaction_handler() local
3381 unsigned char *data = smi_info->curr_msg->data; in dell_poweredge_bt_xaction_handler()
3382 unsigned int size = smi_info->curr_msg->data_size; in dell_poweredge_bt_xaction_handler()
3387 return_hosed_msg_badsize(smi_info); in dell_poweredge_bt_xaction_handler()
3405 setup_dell_poweredge_bt_xaction_handler(struct smi_info *smi_info) in setup_dell_poweredge_bt_xaction_handler() argument
3407 struct ipmi_device_id *id = &smi_info->device_id; in setup_dell_poweredge_bt_xaction_handler()
3409 smi_info->si_type == SI_BT) in setup_dell_poweredge_bt_xaction_handler()
3421 static void setup_oem_data_handler(struct smi_info *smi_info) in setup_oem_data_handler() argument
3423 setup_dell_poweredge_oem_data_handler(smi_info); in setup_oem_data_handler()
3426 static void setup_xaction_handlers(struct smi_info *smi_info) in setup_xaction_handlers() argument
3428 setup_dell_poweredge_bt_xaction_handler(smi_info); in setup_xaction_handlers()
3431 static void check_for_broken_irqs(struct smi_info *smi_info) in check_for_broken_irqs() argument
3433 check_clr_rcv_irq(smi_info); in check_for_broken_irqs()
3434 check_set_rcv_irq(smi_info); in check_for_broken_irqs()
3437 static inline void wait_for_timer_and_thread(struct smi_info *smi_info) in wait_for_timer_and_thread() argument
3439 if (smi_info->thread != NULL) in wait_for_timer_and_thread()
3440 kthread_stop(smi_info->thread); in wait_for_timer_and_thread()
3441 if (smi_info->timer_running) in wait_for_timer_and_thread()
3442 del_timer_sync(&smi_info->si_timer); in wait_for_timer_and_thread()
3459 struct smi_info *info; in default_find_bmc()
3501 static int is_new_interface(struct smi_info *info) in is_new_interface()
3503 struct smi_info *e; in is_new_interface()
3515 static int add_smi(struct smi_info *new_smi) in add_smi()
3543 static int try_smi_init(struct smi_info *new_smi) in try_smi_init()
3767 struct smi_info *e; in init_ipmi_si()
3893 static void cleanup_one_si(struct smi_info *to_clean) in cleanup_one_si()
3957 struct smi_info *e, *tmp_e; in cleanup_ipmi_si()