Lines Matching refs:new_smi
1228 struct smi_info *new_smi = send_info; in smi_start_processing() local
1231 new_smi->intf = intf; in smi_start_processing()
1234 setup_timer(&new_smi->si_timer, smi_timeout, (long)new_smi); in smi_start_processing()
1235 smi_mod_timer(new_smi, jiffies + SI_TIMEOUT_JIFFIES); in smi_start_processing()
1238 if (new_smi->irq_setup) in smi_start_processing()
1239 new_smi->irq_setup(new_smi); in smi_start_processing()
1244 if (new_smi->intf_num < num_force_kipmid) in smi_start_processing()
1245 enable = force_kipmid[new_smi->intf_num]; in smi_start_processing()
1250 else if ((new_smi->si_type != SI_BT) && (!new_smi->irq)) in smi_start_processing()
1254 new_smi->thread = kthread_run(ipmi_thread, new_smi, in smi_start_processing()
1255 "kipmi%d", new_smi->intf_num); in smi_start_processing()
1256 if (IS_ERR(new_smi->thread)) { in smi_start_processing()
1257 dev_notice(new_smi->dev, "Could not start" in smi_start_processing()
1260 PTR_ERR(new_smi->thread)); in smi_start_processing()
1261 new_smi->thread = NULL; in smi_start_processing()
3515 static int add_smi(struct smi_info *new_smi) in add_smi() argument
3520 ipmi_addr_src_to_str(new_smi->addr_source), in add_smi()
3521 si_to_str[new_smi->si_type]); in add_smi()
3523 if (!is_new_interface(new_smi)) { in add_smi()
3532 new_smi->intf = NULL; in add_smi()
3533 new_smi->si_sm = NULL; in add_smi()
3534 new_smi->handlers = NULL; in add_smi()
3536 list_add_tail(&new_smi->link, &smi_infos); in add_smi()
3543 static int try_smi_init(struct smi_info *new_smi) in try_smi_init() argument
3551 ipmi_addr_src_to_str(new_smi->addr_source), in try_smi_init()
3552 si_to_str[new_smi->si_type], in try_smi_init()
3553 addr_space_to_str[new_smi->io.addr_type], in try_smi_init()
3554 new_smi->io.addr_data, in try_smi_init()
3555 new_smi->slave_addr, new_smi->irq); in try_smi_init()
3557 switch (new_smi->si_type) { in try_smi_init()
3559 new_smi->handlers = &kcs_smi_handlers; in try_smi_init()
3563 new_smi->handlers = &smic_smi_handlers; in try_smi_init()
3567 new_smi->handlers = &bt_smi_handlers; in try_smi_init()
3577 new_smi->si_sm = kmalloc(new_smi->handlers->size(), GFP_KERNEL); in try_smi_init()
3578 if (!new_smi->si_sm) { in try_smi_init()
3584 new_smi->io_size = new_smi->handlers->init_data(new_smi->si_sm, in try_smi_init()
3585 &new_smi->io); in try_smi_init()
3588 rv = new_smi->io_setup(new_smi); in try_smi_init()
3595 if (new_smi->handlers->detect(new_smi->si_sm)) { in try_smi_init()
3596 if (new_smi->addr_source) in try_smi_init()
3606 rv = try_get_dev_id(new_smi); in try_smi_init()
3608 if (new_smi->addr_source) in try_smi_init()
3614 setup_oem_data_handler(new_smi); in try_smi_init()
3615 setup_xaction_handlers(new_smi); in try_smi_init()
3616 check_for_broken_irqs(new_smi); in try_smi_init()
3618 new_smi->waiting_msg = NULL; in try_smi_init()
3619 new_smi->curr_msg = NULL; in try_smi_init()
3620 atomic_set(&new_smi->req_events, 0); in try_smi_init()
3621 new_smi->run_to_completion = false; in try_smi_init()
3623 atomic_set(&new_smi->stats[i], 0); in try_smi_init()
3625 new_smi->interrupt_disabled = true; in try_smi_init()
3626 atomic_set(&new_smi->need_watch, 0); in try_smi_init()
3627 new_smi->intf_num = smi_num; in try_smi_init()
3630 rv = try_enable_event_buffer(new_smi); in try_smi_init()
3632 new_smi->has_event_buffer = true; in try_smi_init()
3638 start_clear_flags(new_smi, false); in try_smi_init()
3644 if (new_smi->irq) { in try_smi_init()
3645 new_smi->interrupt_disabled = false; in try_smi_init()
3646 atomic_set(&new_smi->req_events, 1); in try_smi_init()
3649 if (!new_smi->dev) { in try_smi_init()
3654 new_smi->pdev = platform_device_alloc("ipmi_si", in try_smi_init()
3655 new_smi->intf_num); in try_smi_init()
3656 if (!new_smi->pdev) { in try_smi_init()
3661 new_smi->dev = &new_smi->pdev->dev; in try_smi_init()
3662 new_smi->dev->driver = &ipmi_driver.driver; in try_smi_init()
3664 rv = platform_device_add(new_smi->pdev); in try_smi_init()
3672 new_smi->dev_registered = true; in try_smi_init()
3676 new_smi, in try_smi_init()
3677 &new_smi->device_id, in try_smi_init()
3678 new_smi->dev, in try_smi_init()
3679 new_smi->slave_addr); in try_smi_init()
3681 dev_err(new_smi->dev, "Unable to register device: error %d\n", in try_smi_init()
3686 rv = ipmi_smi_add_proc_entry(new_smi->intf, "type", in try_smi_init()
3688 new_smi); in try_smi_init()
3690 dev_err(new_smi->dev, "Unable to create proc entry: %d\n", rv); in try_smi_init()
3694 rv = ipmi_smi_add_proc_entry(new_smi->intf, "si_stats", in try_smi_init()
3696 new_smi); in try_smi_init()
3698 dev_err(new_smi->dev, "Unable to create proc entry: %d\n", rv); in try_smi_init()
3702 rv = ipmi_smi_add_proc_entry(new_smi->intf, "params", in try_smi_init()
3704 new_smi); in try_smi_init()
3706 dev_err(new_smi->dev, "Unable to create proc entry: %d\n", rv); in try_smi_init()
3710 dev_info(new_smi->dev, "IPMI %s interface initialized\n", in try_smi_init()
3711 si_to_str[new_smi->si_type]); in try_smi_init()
3716 wait_for_timer_and_thread(new_smi); in try_smi_init()
3719 new_smi->interrupt_disabled = true; in try_smi_init()
3721 if (new_smi->intf) { in try_smi_init()
3722 ipmi_smi_t intf = new_smi->intf; in try_smi_init()
3723 new_smi->intf = NULL; in try_smi_init()
3727 if (new_smi->irq_cleanup) { in try_smi_init()
3728 new_smi->irq_cleanup(new_smi); in try_smi_init()
3729 new_smi->irq_cleanup = NULL; in try_smi_init()
3739 if (new_smi->si_sm) { in try_smi_init()
3740 if (new_smi->handlers) in try_smi_init()
3741 new_smi->handlers->cleanup(new_smi->si_sm); in try_smi_init()
3742 kfree(new_smi->si_sm); in try_smi_init()
3743 new_smi->si_sm = NULL; in try_smi_init()
3745 if (new_smi->addr_source_cleanup) { in try_smi_init()
3746 new_smi->addr_source_cleanup(new_smi); in try_smi_init()
3747 new_smi->addr_source_cleanup = NULL; in try_smi_init()
3749 if (new_smi->io_cleanup) { in try_smi_init()
3750 new_smi->io_cleanup(new_smi); in try_smi_init()
3751 new_smi->io_cleanup = NULL; in try_smi_init()
3754 if (new_smi->dev_registered) { in try_smi_init()
3755 platform_device_unregister(new_smi->pdev); in try_smi_init()
3756 new_smi->dev_registered = false; in try_smi_init()