Lines Matching refs:new_smi
1216 struct smi_info *new_smi = send_info; in smi_start_processing() local
1219 new_smi->intf = intf; in smi_start_processing()
1222 setup_timer(&new_smi->si_timer, smi_timeout, (long)new_smi); in smi_start_processing()
1223 smi_mod_timer(new_smi, jiffies + SI_TIMEOUT_JIFFIES); in smi_start_processing()
1226 if (new_smi->irq_setup) in smi_start_processing()
1227 new_smi->irq_setup(new_smi); in smi_start_processing()
1232 if (new_smi->intf_num < num_force_kipmid) in smi_start_processing()
1233 enable = force_kipmid[new_smi->intf_num]; in smi_start_processing()
1238 else if ((new_smi->si_type != SI_BT) && (!new_smi->irq)) in smi_start_processing()
1242 new_smi->thread = kthread_run(ipmi_thread, new_smi, in smi_start_processing()
1243 "kipmi%d", new_smi->intf_num); in smi_start_processing()
1244 if (IS_ERR(new_smi->thread)) { in smi_start_processing()
1245 dev_notice(new_smi->dev, "Could not start" in smi_start_processing()
1248 PTR_ERR(new_smi->thread)); in smi_start_processing()
1249 new_smi->thread = NULL; in smi_start_processing()
3409 static int add_smi(struct smi_info *new_smi) in add_smi() argument
3414 ipmi_addr_src_to_str(new_smi->addr_source), in add_smi()
3415 si_to_str[new_smi->si_type]); in add_smi()
3417 if (!is_new_interface(new_smi)) { in add_smi()
3426 new_smi->intf = NULL; in add_smi()
3427 new_smi->si_sm = NULL; in add_smi()
3428 new_smi->handlers = NULL; in add_smi()
3430 list_add_tail(&new_smi->link, &smi_infos); in add_smi()
3437 static int try_smi_init(struct smi_info *new_smi) in try_smi_init() argument
3445 ipmi_addr_src_to_str(new_smi->addr_source), in try_smi_init()
3446 si_to_str[new_smi->si_type], in try_smi_init()
3447 addr_space_to_str[new_smi->io.addr_type], in try_smi_init()
3448 new_smi->io.addr_data, in try_smi_init()
3449 new_smi->slave_addr, new_smi->irq); in try_smi_init()
3451 switch (new_smi->si_type) { in try_smi_init()
3453 new_smi->handlers = &kcs_smi_handlers; in try_smi_init()
3457 new_smi->handlers = &smic_smi_handlers; in try_smi_init()
3461 new_smi->handlers = &bt_smi_handlers; in try_smi_init()
3471 new_smi->si_sm = kmalloc(new_smi->handlers->size(), GFP_KERNEL); in try_smi_init()
3472 if (!new_smi->si_sm) { in try_smi_init()
3478 new_smi->io_size = new_smi->handlers->init_data(new_smi->si_sm, in try_smi_init()
3479 &new_smi->io); in try_smi_init()
3482 rv = new_smi->io_setup(new_smi); in try_smi_init()
3489 if (new_smi->handlers->detect(new_smi->si_sm)) { in try_smi_init()
3490 if (new_smi->addr_source) in try_smi_init()
3500 rv = try_get_dev_id(new_smi); in try_smi_init()
3502 if (new_smi->addr_source) in try_smi_init()
3508 check_clr_rcv_irq(new_smi); in try_smi_init()
3510 setup_oem_data_handler(new_smi); in try_smi_init()
3511 setup_xaction_handlers(new_smi); in try_smi_init()
3513 new_smi->waiting_msg = NULL; in try_smi_init()
3514 new_smi->curr_msg = NULL; in try_smi_init()
3515 atomic_set(&new_smi->req_events, 0); in try_smi_init()
3516 new_smi->run_to_completion = false; in try_smi_init()
3518 atomic_set(&new_smi->stats[i], 0); in try_smi_init()
3520 new_smi->interrupt_disabled = true; in try_smi_init()
3521 atomic_set(&new_smi->need_watch, 0); in try_smi_init()
3522 new_smi->intf_num = smi_num; in try_smi_init()
3525 rv = try_enable_event_buffer(new_smi); in try_smi_init()
3527 new_smi->has_event_buffer = true; in try_smi_init()
3533 start_clear_flags(new_smi, false); in try_smi_init()
3539 if (new_smi->irq) { in try_smi_init()
3540 new_smi->interrupt_disabled = false; in try_smi_init()
3541 atomic_set(&new_smi->req_events, 1); in try_smi_init()
3544 if (!new_smi->dev) { in try_smi_init()
3549 new_smi->pdev = platform_device_alloc("ipmi_si", in try_smi_init()
3550 new_smi->intf_num); in try_smi_init()
3551 if (!new_smi->pdev) { in try_smi_init()
3556 new_smi->dev = &new_smi->pdev->dev; in try_smi_init()
3557 new_smi->dev->driver = &ipmi_driver.driver; in try_smi_init()
3559 rv = platform_device_add(new_smi->pdev); in try_smi_init()
3567 new_smi->dev_registered = true; in try_smi_init()
3571 new_smi, in try_smi_init()
3572 &new_smi->device_id, in try_smi_init()
3573 new_smi->dev, in try_smi_init()
3574 new_smi->slave_addr); in try_smi_init()
3576 dev_err(new_smi->dev, "Unable to register device: error %d\n", in try_smi_init()
3581 rv = ipmi_smi_add_proc_entry(new_smi->intf, "type", in try_smi_init()
3583 new_smi); in try_smi_init()
3585 dev_err(new_smi->dev, "Unable to create proc entry: %d\n", rv); in try_smi_init()
3589 rv = ipmi_smi_add_proc_entry(new_smi->intf, "si_stats", in try_smi_init()
3591 new_smi); in try_smi_init()
3593 dev_err(new_smi->dev, "Unable to create proc entry: %d\n", rv); in try_smi_init()
3597 rv = ipmi_smi_add_proc_entry(new_smi->intf, "params", in try_smi_init()
3599 new_smi); in try_smi_init()
3601 dev_err(new_smi->dev, "Unable to create proc entry: %d\n", rv); in try_smi_init()
3605 dev_info(new_smi->dev, "IPMI %s interface initialized\n", in try_smi_init()
3606 si_to_str[new_smi->si_type]); in try_smi_init()
3611 wait_for_timer_and_thread(new_smi); in try_smi_init()
3614 new_smi->interrupt_disabled = true; in try_smi_init()
3616 if (new_smi->intf) { in try_smi_init()
3617 ipmi_smi_t intf = new_smi->intf; in try_smi_init()
3618 new_smi->intf = NULL; in try_smi_init()
3622 if (new_smi->irq_cleanup) { in try_smi_init()
3623 new_smi->irq_cleanup(new_smi); in try_smi_init()
3624 new_smi->irq_cleanup = NULL; in try_smi_init()
3634 if (new_smi->si_sm) { in try_smi_init()
3635 if (new_smi->handlers) in try_smi_init()
3636 new_smi->handlers->cleanup(new_smi->si_sm); in try_smi_init()
3637 kfree(new_smi->si_sm); in try_smi_init()
3638 new_smi->si_sm = NULL; in try_smi_init()
3640 if (new_smi->addr_source_cleanup) { in try_smi_init()
3641 new_smi->addr_source_cleanup(new_smi); in try_smi_init()
3642 new_smi->addr_source_cleanup = NULL; in try_smi_init()
3644 if (new_smi->io_cleanup) { in try_smi_init()
3645 new_smi->io_cleanup(new_smi); in try_smi_init()
3646 new_smi->io_cleanup = NULL; in try_smi_init()
3649 if (new_smi->dev_registered) { in try_smi_init()
3650 platform_device_unregister(new_smi->pdev); in try_smi_init()
3651 new_smi->dev_registered = false; in try_smi_init()