Lines Matching refs:smi_info

163 struct smi_info {  struct
179 int (*io_setup)(struct smi_info *info); argument
180 void (*io_cleanup)(struct smi_info *info); argument
181 int (*irq_setup)(struct smi_info *info); argument
182 void (*irq_cleanup)(struct smi_info *info); argument
185 void (*addr_source_cleanup)(struct smi_info *info); argument
193 int (*oem_data_avail_handler)(struct smi_info *smi_info); argument
324 static int add_smi(struct smi_info *smi);
325 static int try_smi_init(struct smi_info *smi);
326 static void cleanup_one_si(struct smi_info *to_clean);
347 static void deliver_recv_msg(struct smi_info *smi_info, in deliver_recv_msg() argument
351 if (smi_info->intf) in deliver_recv_msg()
352 ipmi_smi_msg_received(smi_info->intf, msg); in deliver_recv_msg()
357 static void return_hosed_msg(struct smi_info *smi_info, int cCode) in return_hosed_msg() argument
359 struct ipmi_smi_msg *msg = smi_info->curr_msg; in return_hosed_msg()
371 smi_info->curr_msg = NULL; in return_hosed_msg()
372 deliver_recv_msg(smi_info, msg); in return_hosed_msg()
375 static enum si_sm_result start_next_msg(struct smi_info *smi_info) in start_next_msg() argument
379 if (!smi_info->waiting_msg) { in start_next_msg()
380 smi_info->curr_msg = NULL; in start_next_msg()
385 smi_info->curr_msg = smi_info->waiting_msg; in start_next_msg()
386 smi_info->waiting_msg = NULL; in start_next_msg()
389 0, smi_info); in start_next_msg()
394 err = smi_info->handlers->start_transaction( in start_next_msg()
395 smi_info->si_sm, in start_next_msg()
396 smi_info->curr_msg->data, in start_next_msg()
397 smi_info->curr_msg->data_size); in start_next_msg()
399 return_hosed_msg(smi_info, err); in start_next_msg()
407 static void smi_mod_timer(struct smi_info *smi_info, unsigned long new_val) in smi_mod_timer() argument
409 smi_info->last_timeout_jiffies = jiffies; in smi_mod_timer()
410 mod_timer(&smi_info->si_timer, new_val); in smi_mod_timer()
411 smi_info->timer_running = true; in smi_mod_timer()
417 static void start_new_msg(struct smi_info *smi_info, unsigned char *msg, in start_new_msg() argument
420 smi_mod_timer(smi_info, jiffies + SI_TIMEOUT_JIFFIES); in start_new_msg()
422 if (smi_info->thread) in start_new_msg()
423 wake_up_process(smi_info->thread); in start_new_msg()
425 smi_info->handlers->start_transaction(smi_info->si_sm, msg, size); in start_new_msg()
428 static void start_check_enables(struct smi_info *smi_info, bool start_timer) in start_check_enables() argument
436 start_new_msg(smi_info, msg, 2); in start_check_enables()
438 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); in start_check_enables()
439 smi_info->si_state = SI_CHECKING_ENABLES; in start_check_enables()
442 static void start_clear_flags(struct smi_info *smi_info, bool start_timer) in start_clear_flags() argument
452 start_new_msg(smi_info, msg, 3); in start_clear_flags()
454 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 3); in start_clear_flags()
455 smi_info->si_state = SI_CLEARING_FLAGS; in start_clear_flags()
458 static void start_getting_msg_queue(struct smi_info *smi_info) in start_getting_msg_queue() argument
460 smi_info->curr_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2); in start_getting_msg_queue()
461 smi_info->curr_msg->data[1] = IPMI_GET_MSG_CMD; in start_getting_msg_queue()
462 smi_info->curr_msg->data_size = 2; in start_getting_msg_queue()
464 start_new_msg(smi_info, smi_info->curr_msg->data, in start_getting_msg_queue()
465 smi_info->curr_msg->data_size); in start_getting_msg_queue()
466 smi_info->si_state = SI_GETTING_MESSAGES; in start_getting_msg_queue()
469 static void start_getting_events(struct smi_info *smi_info) in start_getting_events() argument
471 smi_info->curr_msg->data[0] = (IPMI_NETFN_APP_REQUEST << 2); in start_getting_events()
472 smi_info->curr_msg->data[1] = IPMI_READ_EVENT_MSG_BUFFER_CMD; in start_getting_events()
473 smi_info->curr_msg->data_size = 2; in start_getting_events()
475 start_new_msg(smi_info, smi_info->curr_msg->data, in start_getting_events()
476 smi_info->curr_msg->data_size); in start_getting_events()
477 smi_info->si_state = SI_GETTING_EVENTS; in start_getting_events()
489 static inline bool disable_si_irq(struct smi_info *smi_info, bool start_timer) in disable_si_irq() argument
491 if ((smi_info->irq) && (!smi_info->interrupt_disabled)) { in disable_si_irq()
492 smi_info->interrupt_disabled = true; in disable_si_irq()
493 start_check_enables(smi_info, start_timer); in disable_si_irq()
499 static inline bool enable_si_irq(struct smi_info *smi_info) in enable_si_irq() argument
501 if ((smi_info->irq) && (smi_info->interrupt_disabled)) { in enable_si_irq()
502 smi_info->interrupt_disabled = false; in enable_si_irq()
503 start_check_enables(smi_info, true); in enable_si_irq()
515 static struct ipmi_smi_msg *alloc_msg_handle_irq(struct smi_info *smi_info) in alloc_msg_handle_irq() argument
521 if (!disable_si_irq(smi_info, true)) in alloc_msg_handle_irq()
522 smi_info->si_state = SI_NORMAL; in alloc_msg_handle_irq()
523 } else if (enable_si_irq(smi_info)) { in alloc_msg_handle_irq()
530 static void handle_flags(struct smi_info *smi_info) in handle_flags() argument
533 if (smi_info->msg_flags & WDT_PRE_TIMEOUT_INT) { in handle_flags()
535 smi_inc_stat(smi_info, watchdog_pretimeouts); in handle_flags()
537 start_clear_flags(smi_info, true); in handle_flags()
538 smi_info->msg_flags &= ~WDT_PRE_TIMEOUT_INT; in handle_flags()
539 if (smi_info->intf) in handle_flags()
540 ipmi_smi_watchdog_pretimeout(smi_info->intf); in handle_flags()
541 } else if (smi_info->msg_flags & RECEIVE_MSG_AVAIL) { in handle_flags()
543 smi_info->curr_msg = alloc_msg_handle_irq(smi_info); in handle_flags()
544 if (!smi_info->curr_msg) in handle_flags()
547 start_getting_msg_queue(smi_info); in handle_flags()
548 } else if (smi_info->msg_flags & EVENT_MSG_BUFFER_FULL) { in handle_flags()
550 smi_info->curr_msg = alloc_msg_handle_irq(smi_info); in handle_flags()
551 if (!smi_info->curr_msg) in handle_flags()
554 start_getting_events(smi_info); in handle_flags()
555 } else if (smi_info->msg_flags & OEM_DATA_AVAIL && in handle_flags()
556 smi_info->oem_data_avail_handler) { in handle_flags()
557 if (smi_info->oem_data_avail_handler(smi_info)) in handle_flags()
560 smi_info->si_state = SI_NORMAL; in handle_flags()
569 static u8 current_global_enables(struct smi_info *smi_info, u8 base, in current_global_enables() argument
574 if (smi_info->supports_event_msg_buff) in current_global_enables()
577 if ((smi_info->irq && !smi_info->interrupt_disabled) || in current_global_enables()
578 smi_info->cannot_clear_recv_irq_bit) in current_global_enables()
581 if (smi_info->supports_event_msg_buff && in current_global_enables()
582 smi_info->irq && !smi_info->interrupt_disabled) in current_global_enables()
591 static void check_bt_irq(struct smi_info *smi_info, bool irq_on) in check_bt_irq() argument
593 u8 irqstate = smi_info->io.inputb(&smi_info->io, IPMI_BT_INTMASK_REG); in check_bt_irq()
601 smi_info->io.outputb(&smi_info->io, IPMI_BT_INTMASK_REG, in check_bt_irq()
604 smi_info->io.outputb(&smi_info->io, IPMI_BT_INTMASK_REG, 0); in check_bt_irq()
607 static void handle_transaction_done(struct smi_info *smi_info) in handle_transaction_done() argument
612 switch (smi_info->si_state) { in handle_transaction_done()
614 if (!smi_info->curr_msg) in handle_transaction_done()
617 smi_info->curr_msg->rsp_size in handle_transaction_done()
618 = smi_info->handlers->get_result( in handle_transaction_done()
619 smi_info->si_sm, in handle_transaction_done()
620 smi_info->curr_msg->rsp, in handle_transaction_done()
628 msg = smi_info->curr_msg; in handle_transaction_done()
629 smi_info->curr_msg = NULL; in handle_transaction_done()
630 deliver_recv_msg(smi_info, msg); in handle_transaction_done()
639 len = smi_info->handlers->get_result(smi_info->si_sm, msg, 4); in handle_transaction_done()
642 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
648 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
650 smi_info->msg_flags = msg[3]; in handle_transaction_done()
651 handle_flags(smi_info); in handle_transaction_done()
661 smi_info->handlers->get_result(smi_info->si_sm, msg, 3); in handle_transaction_done()
664 dev_warn(smi_info->dev, in handle_transaction_done()
667 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
673 smi_info->curr_msg->rsp_size in handle_transaction_done()
674 = smi_info->handlers->get_result( in handle_transaction_done()
675 smi_info->si_sm, in handle_transaction_done()
676 smi_info->curr_msg->rsp, in handle_transaction_done()
684 msg = smi_info->curr_msg; in handle_transaction_done()
685 smi_info->curr_msg = NULL; in handle_transaction_done()
691 smi_info->msg_flags &= ~EVENT_MSG_BUFFER_FULL; in handle_transaction_done()
692 handle_flags(smi_info); in handle_transaction_done()
694 smi_inc_stat(smi_info, events); in handle_transaction_done()
702 handle_flags(smi_info); in handle_transaction_done()
704 deliver_recv_msg(smi_info, msg); in handle_transaction_done()
711 smi_info->curr_msg->rsp_size in handle_transaction_done()
712 = smi_info->handlers->get_result( in handle_transaction_done()
713 smi_info->si_sm, in handle_transaction_done()
714 smi_info->curr_msg->rsp, in handle_transaction_done()
722 msg = smi_info->curr_msg; in handle_transaction_done()
723 smi_info->curr_msg = NULL; in handle_transaction_done()
729 smi_info->msg_flags &= ~RECEIVE_MSG_AVAIL; in handle_transaction_done()
730 handle_flags(smi_info); in handle_transaction_done()
732 smi_inc_stat(smi_info, incoming_messages); in handle_transaction_done()
740 handle_flags(smi_info); in handle_transaction_done()
742 deliver_recv_msg(smi_info, msg); in handle_transaction_done()
754 smi_info->handlers->get_result(smi_info->si_sm, msg, 4); in handle_transaction_done()
756 dev_warn(smi_info->dev, in handle_transaction_done()
758 dev_warn(smi_info->dev, in handle_transaction_done()
760 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
763 enables = current_global_enables(smi_info, 0, &irq_on); in handle_transaction_done()
764 if (smi_info->si_type == SI_BT) in handle_transaction_done()
766 check_bt_irq(smi_info, irq_on); in handle_transaction_done()
772 smi_info->handlers->start_transaction( in handle_transaction_done()
773 smi_info->si_sm, msg, 3); in handle_transaction_done()
774 smi_info->si_state = SI_SETTING_ENABLES; in handle_transaction_done()
775 } else if (smi_info->supports_event_msg_buff) { in handle_transaction_done()
776 smi_info->curr_msg = ipmi_alloc_smi_msg(); in handle_transaction_done()
777 if (!smi_info->curr_msg) { in handle_transaction_done()
778 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
781 start_getting_msg_queue(smi_info); in handle_transaction_done()
783 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
792 smi_info->handlers->get_result(smi_info->si_sm, msg, 4); in handle_transaction_done()
794 dev_warn(smi_info->dev, in handle_transaction_done()
798 if (smi_info->supports_event_msg_buff) { in handle_transaction_done()
799 smi_info->curr_msg = ipmi_alloc_smi_msg(); in handle_transaction_done()
800 if (!smi_info->curr_msg) { in handle_transaction_done()
801 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
804 start_getting_msg_queue(smi_info); in handle_transaction_done()
806 smi_info->si_state = SI_NORMAL; in handle_transaction_done()
818 static enum si_sm_result smi_event_handler(struct smi_info *smi_info, in smi_event_handler() argument
832 si_sm_result = smi_info->handlers->event(smi_info->si_sm, time); in smi_event_handler()
835 si_sm_result = smi_info->handlers->event(smi_info->si_sm, 0); in smi_event_handler()
838 smi_inc_stat(smi_info, complete_transactions); in smi_event_handler()
840 handle_transaction_done(smi_info); in smi_event_handler()
841 si_sm_result = smi_info->handlers->event(smi_info->si_sm, 0); in smi_event_handler()
843 smi_inc_stat(smi_info, hosed_count); in smi_event_handler()
849 smi_info->si_state = SI_NORMAL; in smi_event_handler()
850 if (smi_info->curr_msg != NULL) { in smi_event_handler()
856 return_hosed_msg(smi_info, IPMI_ERR_UNSPECIFIED); in smi_event_handler()
858 si_sm_result = smi_info->handlers->event(smi_info->si_sm, 0); in smi_event_handler()
865 if (likely(smi_info->intf) && in smi_event_handler()
866 (si_sm_result == SI_SM_ATTN || smi_info->got_attn)) { in smi_event_handler()
869 if (smi_info->si_state != SI_NORMAL) { in smi_event_handler()
874 smi_info->got_attn = true; in smi_event_handler()
876 smi_info->got_attn = false; in smi_event_handler()
877 smi_inc_stat(smi_info, attentions); in smi_event_handler()
889 start_new_msg(smi_info, msg, 2); in smi_event_handler()
890 smi_info->si_state = SI_GETTING_FLAGS; in smi_event_handler()
897 smi_inc_stat(smi_info, idles); in smi_event_handler()
899 si_sm_result = start_next_msg(smi_info); in smi_event_handler()
905 && (atomic_read(&smi_info->req_events))) { in smi_event_handler()
910 atomic_set(&smi_info->req_events, 0); in smi_event_handler()
918 if (smi_info->supports_event_msg_buff || smi_info->irq) { in smi_event_handler()
919 start_check_enables(smi_info, true); in smi_event_handler()
921 smi_info->curr_msg = alloc_msg_handle_irq(smi_info); in smi_event_handler()
922 if (!smi_info->curr_msg) in smi_event_handler()
925 start_getting_events(smi_info); in smi_event_handler()
933 static void check_start_timer_thread(struct smi_info *smi_info) in check_start_timer_thread() argument
935 if (smi_info->si_state == SI_NORMAL && smi_info->curr_msg == NULL) { in check_start_timer_thread()
936 smi_mod_timer(smi_info, jiffies + SI_TIMEOUT_JIFFIES); in check_start_timer_thread()
938 if (smi_info->thread) in check_start_timer_thread()
939 wake_up_process(smi_info->thread); in check_start_timer_thread()
941 start_next_msg(smi_info); in check_start_timer_thread()
942 smi_event_handler(smi_info, 0); in check_start_timer_thread()
949 struct smi_info *smi_info = send_info; in sender() local
955 if (smi_info->run_to_completion) { in sender()
960 smi_info->waiting_msg = msg; in sender()
967 result = smi_event_handler(smi_info, 0); in sender()
970 result = smi_event_handler(smi_info, in sender()
976 spin_lock_irqsave(&smi_info->si_lock, flags); in sender()
984 BUG_ON(smi_info->waiting_msg); in sender()
985 smi_info->waiting_msg = msg; in sender()
986 check_start_timer_thread(smi_info); in sender()
987 spin_unlock_irqrestore(&smi_info->si_lock, flags); in sender()
992 struct smi_info *smi_info = send_info; in set_run_to_completion() local
995 smi_info->run_to_completion = i_run_to_completion; in set_run_to_completion()
997 result = smi_event_handler(smi_info, 0); in set_run_to_completion()
1000 result = smi_event_handler(smi_info, in set_run_to_completion()
1021 const struct smi_info *smi_info, in ipmi_thread_busy_wait() argument
1026 if (smi_info->intf_num < num_max_busy_us) in ipmi_thread_busy_wait()
1027 max_busy_us = kipmid_max_busy_us[smi_info->intf_num]; in ipmi_thread_busy_wait()
1057 struct smi_info *smi_info = data; in ipmi_thread() local
1067 spin_lock_irqsave(&(smi_info->si_lock), flags); in ipmi_thread()
1068 smi_result = smi_event_handler(smi_info, 0); in ipmi_thread()
1077 if (smi_result != SI_SM_IDLE && !smi_info->timer_running) in ipmi_thread()
1078 smi_mod_timer(smi_info, jiffies + SI_TIMEOUT_JIFFIES); in ipmi_thread()
1080 spin_unlock_irqrestore(&(smi_info->si_lock), flags); in ipmi_thread()
1081 busy_wait = ipmi_thread_busy_wait(smi_result, smi_info, in ipmi_thread()
1088 if (atomic_read(&smi_info->need_watch)) { in ipmi_thread()
1104 struct smi_info *smi_info = send_info; in poll() local
1106 bool run_to_completion = smi_info->run_to_completion; in poll()
1114 spin_lock_irqsave(&smi_info->si_lock, flags); in poll()
1115 smi_event_handler(smi_info, 10); in poll()
1117 spin_unlock_irqrestore(&smi_info->si_lock, flags); in poll()
1122 struct smi_info *smi_info = send_info; in request_events() local
1124 if (!smi_info->has_event_buffer) in request_events()
1127 atomic_set(&smi_info->req_events, 1); in request_events()
1132 struct smi_info *smi_info = send_info; in set_need_watch() local
1135 atomic_set(&smi_info->need_watch, enable); in set_need_watch()
1136 spin_lock_irqsave(&smi_info->si_lock, flags); in set_need_watch()
1137 check_start_timer_thread(smi_info); in set_need_watch()
1138 spin_unlock_irqrestore(&smi_info->si_lock, flags); in set_need_watch()
1145 struct smi_info *smi_info = (struct smi_info *) data; in smi_timeout() local
1152 spin_lock_irqsave(&(smi_info->si_lock), flags); in smi_timeout()
1156 time_diff = (((long)jiffies_now - (long)smi_info->last_timeout_jiffies) in smi_timeout()
1158 smi_result = smi_event_handler(smi_info, time_diff); in smi_timeout()
1160 if ((smi_info->irq) && (!smi_info->interrupt_disabled)) { in smi_timeout()
1163 smi_inc_stat(smi_info, long_timeouts); in smi_timeout()
1172 smi_inc_stat(smi_info, short_timeouts); in smi_timeout()
1175 smi_inc_stat(smi_info, long_timeouts); in smi_timeout()
1181 smi_mod_timer(smi_info, timeout); in smi_timeout()
1183 smi_info->timer_running = false; in smi_timeout()
1184 spin_unlock_irqrestore(&(smi_info->si_lock), flags); in smi_timeout()
1189 struct smi_info *smi_info = data; in si_irq_handler() local
1192 spin_lock_irqsave(&(smi_info->si_lock), flags); in si_irq_handler()
1194 smi_inc_stat(smi_info, interrupts); in si_irq_handler()
1198 smi_event_handler(smi_info, 0); in si_irq_handler()
1199 spin_unlock_irqrestore(&(smi_info->si_lock), flags); in si_irq_handler()
1205 struct smi_info *smi_info = data; in si_bt_irq_handler() local
1207 smi_info->io.outputb(&smi_info->io, IPMI_BT_INTMASK_REG, in si_bt_irq_handler()
1216 struct smi_info *new_smi = send_info; in smi_start_processing()
1258 struct smi_info *smi = send_info; in get_smi_info()
1270 struct smi_info *smi_info = send_info; in set_maintenance_mode() local
1273 atomic_set(&smi_info->req_events, 0); in set_maintenance_mode()
1420 static void std_irq_cleanup(struct smi_info *info) in std_irq_cleanup()
1428 static int std_irq_setup(struct smi_info *info) in std_irq_setup()
1509 static void port_cleanup(struct smi_info *info) in port_cleanup()
1521 static int port_setup(struct smi_info *info) in port_setup()
1623 static void mem_cleanup(struct smi_info *info) in mem_cleanup()
1638 static int mem_setup(struct smi_info *info) in mem_setup()
1778 static struct smi_info *smi_info_alloc(void) in smi_info_alloc()
1780 struct smi_info *info = kzalloc(sizeof(*info), GFP_KERNEL); in smi_info_alloc()
1803 struct smi_info *info; in hotmod_handler()
1941 struct smi_info *e, *tmp_e; in hotmod_handler()
1965 struct smi_info *info; in hardcode_find_bmc()
2049 struct smi_info *smi_info = context; in ipmi_acpi_gpe() local
2052 spin_lock_irqsave(&(smi_info->si_lock), flags); in ipmi_acpi_gpe()
2054 smi_inc_stat(smi_info, interrupts); in ipmi_acpi_gpe()
2058 smi_event_handler(smi_info, 0); in ipmi_acpi_gpe()
2059 spin_unlock_irqrestore(&(smi_info->si_lock), flags); in ipmi_acpi_gpe()
2064 static void acpi_gpe_irq_cleanup(struct smi_info *info) in acpi_gpe_irq_cleanup()
2072 static int acpi_gpe_irq_setup(struct smi_info *info) in acpi_gpe_irq_setup()
2144 struct smi_info *info; in try_init_spmi()
2256 struct smi_info *info; in ipmi_pnp_probe()
2361 struct smi_info *info = pnp_get_drvdata(dev); in ipmi_pnp_remove()
2455 struct smi_info *info; in try_init_dmi()
2550 static void ipmi_pci_cleanup(struct smi_info *info) in ipmi_pci_cleanup()
2557 static int ipmi_pci_probe_regspacing(struct smi_info *info) in ipmi_pci_probe_regspacing()
2594 struct smi_info *info; in ipmi_pci_probe()
2667 struct smi_info *info = pci_get_drvdata(pdev); in ipmi_pci_remove()
2692 struct smi_info *info; in ipmi_probe()
2807 struct smi_info *info; in ipmi_parisc_probe()
2862 static int wait_for_msg_done(struct smi_info *smi_info) in wait_for_msg_done() argument
2866 smi_result = smi_info->handlers->event(smi_info->si_sm, 0); in wait_for_msg_done()
2871 smi_result = smi_info->handlers->event( in wait_for_msg_done()
2872 smi_info->si_sm, jiffies_to_usecs(1)); in wait_for_msg_done()
2874 smi_result = smi_info->handlers->event( in wait_for_msg_done()
2875 smi_info->si_sm, 0); in wait_for_msg_done()
2889 static int try_get_dev_id(struct smi_info *smi_info) in try_get_dev_id() argument
2906 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); in try_get_dev_id()
2908 rv = wait_for_msg_done(smi_info); in try_get_dev_id()
2912 resp_len = smi_info->handlers->get_result(smi_info->si_sm, in try_get_dev_id()
2916 rv = ipmi_demangle_device_id(resp, resp_len, &smi_info->device_id); in try_get_dev_id()
2928 static void check_clr_rcv_irq(struct smi_info *smi_info) in check_clr_rcv_irq() argument
2945 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); in check_clr_rcv_irq()
2947 rv = wait_for_msg_done(smi_info); in check_clr_rcv_irq()
2955 resp_len = smi_info->handlers->get_result(smi_info->si_sm, in check_clr_rcv_irq()
2976 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 3); in check_clr_rcv_irq()
2978 rv = wait_for_msg_done(smi_info); in check_clr_rcv_irq()
2986 resp_len = smi_info->handlers->get_result(smi_info->si_sm, in check_clr_rcv_irq()
3007 smi_info->cannot_clear_recv_irq_bit = true; in check_clr_rcv_irq()
3013 static int try_enable_event_buffer(struct smi_info *smi_info) in try_enable_event_buffer() argument
3026 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 2); in try_enable_event_buffer()
3028 rv = wait_for_msg_done(smi_info); in try_enable_event_buffer()
3036 resp_len = smi_info->handlers->get_result(smi_info->si_sm, in try_enable_event_buffer()
3051 smi_info->supports_event_msg_buff = true; in try_enable_event_buffer()
3058 smi_info->handlers->start_transaction(smi_info->si_sm, msg, 3); in try_enable_event_buffer()
3060 rv = wait_for_msg_done(smi_info); in try_enable_event_buffer()
3068 resp_len = smi_info->handlers->get_result(smi_info->si_sm, in try_enable_event_buffer()
3087 smi_info->supports_event_msg_buff = true; in try_enable_event_buffer()
3096 struct smi_info *smi = m->private; in smi_type_proc_show()
3117 struct smi_info *smi = m->private; in smi_si_stats_proc_show()
3160 struct smi_info *smi = m->private; in smi_params_proc_show()
3195 static int oem_data_avail_to_receive_msg_avail(struct smi_info *smi_info) in oem_data_avail_to_receive_msg_avail() argument
3197 smi_info->msg_flags = ((smi_info->msg_flags & ~OEM_DATA_AVAIL) | in oem_data_avail_to_receive_msg_avail()
3231 static void setup_dell_poweredge_oem_data_handler(struct smi_info *smi_info) in setup_dell_poweredge_oem_data_handler() argument
3233 struct ipmi_device_id *id = &smi_info->device_id; in setup_dell_poweredge_oem_data_handler()
3238 smi_info->oem_data_avail_handler = in setup_dell_poweredge_oem_data_handler()
3243 smi_info->oem_data_avail_handler = in setup_dell_poweredge_oem_data_handler()
3250 static void return_hosed_msg_badsize(struct smi_info *smi_info) in return_hosed_msg_badsize() argument
3252 struct ipmi_smi_msg *msg = smi_info->curr_msg; in return_hosed_msg_badsize()
3259 smi_info->curr_msg = NULL; in return_hosed_msg_badsize()
3260 deliver_recv_msg(smi_info, msg); in return_hosed_msg_badsize()
3280 struct smi_info *smi_info = in; in dell_poweredge_bt_xaction_handler() local
3281 unsigned char *data = smi_info->curr_msg->data; in dell_poweredge_bt_xaction_handler()
3282 unsigned int size = smi_info->curr_msg->data_size; in dell_poweredge_bt_xaction_handler()
3287 return_hosed_msg_badsize(smi_info); in dell_poweredge_bt_xaction_handler()
3305 setup_dell_poweredge_bt_xaction_handler(struct smi_info *smi_info) in setup_dell_poweredge_bt_xaction_handler() argument
3307 struct ipmi_device_id *id = &smi_info->device_id; in setup_dell_poweredge_bt_xaction_handler()
3309 smi_info->si_type == SI_BT) in setup_dell_poweredge_bt_xaction_handler()
3321 static void setup_oem_data_handler(struct smi_info *smi_info) in setup_oem_data_handler() argument
3323 setup_dell_poweredge_oem_data_handler(smi_info); in setup_oem_data_handler()
3326 static void setup_xaction_handlers(struct smi_info *smi_info) in setup_xaction_handlers() argument
3328 setup_dell_poweredge_bt_xaction_handler(smi_info); in setup_xaction_handlers()
3331 static inline void wait_for_timer_and_thread(struct smi_info *smi_info) in wait_for_timer_and_thread() argument
3333 if (smi_info->thread != NULL) in wait_for_timer_and_thread()
3334 kthread_stop(smi_info->thread); in wait_for_timer_and_thread()
3335 if (smi_info->timer_running) in wait_for_timer_and_thread()
3336 del_timer_sync(&smi_info->si_timer); in wait_for_timer_and_thread()
3353 struct smi_info *info; in default_find_bmc()
3395 static int is_new_interface(struct smi_info *info) in is_new_interface()
3397 struct smi_info *e; in is_new_interface()
3409 static int add_smi(struct smi_info *new_smi) in add_smi()
3437 static int try_smi_init(struct smi_info *new_smi) in try_smi_init()
3662 struct smi_info *e; in init_ipmi_si()
3795 static void cleanup_one_si(struct smi_info *to_clean) in cleanup_one_si()
3859 struct smi_info *e, *tmp_e; in cleanup_ipmi_si()