Lines Matching refs:mdev
81 static int mic_dp_init(struct mic_device *mdev) in mic_dp_init() argument
83 mdev->dp = kzalloc(MIC_DP_SIZE, GFP_KERNEL); in mic_dp_init()
84 if (!mdev->dp) { in mic_dp_init()
85 dev_err(mdev->sdev->parent, "%s %d err %d\n", in mic_dp_init()
90 mdev->dp_dma_addr = mic_map_single(mdev, in mic_dp_init()
91 mdev->dp, MIC_DP_SIZE); in mic_dp_init()
92 if (mic_map_error(mdev->dp_dma_addr)) { in mic_dp_init()
93 kfree(mdev->dp); in mic_dp_init()
94 dev_err(mdev->sdev->parent, "%s %d err %d\n", in mic_dp_init()
98 mdev->ops->write_spad(mdev, MIC_DPLO_SPAD, mdev->dp_dma_addr); in mic_dp_init()
99 mdev->ops->write_spad(mdev, MIC_DPHI_SPAD, mdev->dp_dma_addr >> 32); in mic_dp_init()
104 static void mic_dp_uninit(struct mic_device *mdev) in mic_dp_uninit() argument
106 mic_unmap_single(mdev, mdev->dp_dma_addr, MIC_DP_SIZE); in mic_dp_uninit()
107 kfree(mdev->dp); in mic_dp_uninit()
115 struct mic_device *mdev = data; in mic_shutdown_db() local
116 struct mic_bootparam *bootparam = mdev->dp; in mic_shutdown_db()
118 mdev->ops->intr_workarounds(mdev); in mic_shutdown_db()
126 schedule_work(&mdev->shutdown_work); in mic_shutdown_db()
141 static void mic_ops_init(struct mic_device *mdev) in mic_ops_init() argument
143 switch (mdev->family) { in mic_ops_init()
145 mdev->ops = &mic_x100_ops; in mic_ops_init()
146 mdev->intr_ops = &mic_x100_intr_ops; in mic_ops_init()
147 mdev->smpt_ops = &mic_x100_smpt_ops; in mic_ops_init()
203 struct mic_device *mdev = container_of(notifier, in mic_pm_notifier() local
210 mic_prepare_suspend(mdev); in mic_pm_notifier()
217 mic_complete_resume(mdev); in mic_pm_notifier()
236 mic_device_init(struct mic_device *mdev, struct pci_dev *pdev) in mic_device_init() argument
240 mdev->family = mic_get_family(pdev); in mic_device_init()
241 mdev->stepping = pdev->revision; in mic_device_init()
242 mic_ops_init(mdev); in mic_device_init()
243 mic_sysfs_init(mdev); in mic_device_init()
244 mutex_init(&mdev->mic_mutex); in mic_device_init()
245 mdev->irq_info.next_avail_src = 0; in mic_device_init()
246 INIT_WORK(&mdev->reset_trigger_work, mic_reset_trigger_work); in mic_device_init()
247 INIT_WORK(&mdev->shutdown_work, mic_shutdown_work); in mic_device_init()
248 init_completion(&mdev->reset_wait); in mic_device_init()
249 INIT_LIST_HEAD(&mdev->vdev_list); in mic_device_init()
250 mdev->pm_notifier.notifier_call = mic_pm_notifier; in mic_device_init()
251 rc = register_pm_notifier(&mdev->pm_notifier); in mic_device_init()
259 flush_work(&mdev->shutdown_work); in mic_device_init()
260 flush_work(&mdev->reset_trigger_work); in mic_device_init()
271 static void mic_device_uninit(struct mic_device *mdev) in mic_device_uninit() argument
274 kfree(mdev->cmdline); in mic_device_uninit()
275 kfree(mdev->firmware); in mic_device_uninit()
276 kfree(mdev->ramdisk); in mic_device_uninit()
277 kfree(mdev->bootmode); in mic_device_uninit()
278 flush_work(&mdev->reset_trigger_work); in mic_device_uninit()
279 flush_work(&mdev->shutdown_work); in mic_device_uninit()
280 unregister_pm_notifier(&mdev->pm_notifier); in mic_device_uninit()
295 struct mic_device *mdev; in mic_probe() local
297 mdev = kzalloc(sizeof(*mdev), GFP_KERNEL); in mic_probe()
298 if (!mdev) { in mic_probe()
303 mdev->id = ida_simple_get(&g_mic_ida, 0, MIC_MAX_NUM_DEVS, GFP_KERNEL); in mic_probe()
304 if (mdev->id < 0) { in mic_probe()
305 rc = mdev->id; in mic_probe()
310 rc = mic_device_init(mdev, pdev); in mic_probe()
336 mdev->mmio.pa = pci_resource_start(pdev, mdev->ops->mmio_bar); in mic_probe()
337 mdev->mmio.len = pci_resource_len(pdev, mdev->ops->mmio_bar); in mic_probe()
338 mdev->mmio.va = pci_ioremap_bar(pdev, mdev->ops->mmio_bar); in mic_probe()
339 if (!mdev->mmio.va) { in mic_probe()
345 mdev->aper.pa = pci_resource_start(pdev, mdev->ops->aper_bar); in mic_probe()
346 mdev->aper.len = pci_resource_len(pdev, mdev->ops->aper_bar); in mic_probe()
347 mdev->aper.va = ioremap_wc(mdev->aper.pa, mdev->aper.len); in mic_probe()
348 if (!mdev->aper.va) { in mic_probe()
354 mdev->intr_ops->intr_init(mdev); in mic_probe()
355 rc = mic_setup_interrupts(mdev, pdev); in mic_probe()
360 rc = mic_smpt_init(mdev); in mic_probe()
366 pci_set_drvdata(pdev, mdev); in mic_probe()
368 mdev->sdev = device_create_with_groups(g_mic_class, &pdev->dev, in mic_probe()
369 MKDEV(MAJOR(g_mic_devno), mdev->id), NULL, in mic_probe()
370 mdev->attr_group, "mic%d", mdev->id); in mic_probe()
371 if (IS_ERR(mdev->sdev)) { in mic_probe()
372 rc = PTR_ERR(mdev->sdev); in mic_probe()
377 mdev->state_sysfs = sysfs_get_dirent(mdev->sdev->kobj.sd, "state"); in mic_probe()
378 if (!mdev->state_sysfs) { in mic_probe()
384 rc = mic_dp_init(mdev); in mic_probe()
389 mutex_lock(&mdev->mic_mutex); in mic_probe()
391 mdev->shutdown_db = mic_next_db(mdev); in mic_probe()
392 mdev->shutdown_cookie = mic_request_threaded_irq(mdev, mic_shutdown_db, in mic_probe()
393 NULL, "shutdown-interrupt", mdev, in mic_probe()
394 mdev->shutdown_db, MIC_INTR_DB); in mic_probe()
395 if (IS_ERR(mdev->shutdown_cookie)) { in mic_probe()
396 rc = PTR_ERR(mdev->shutdown_cookie); in mic_probe()
397 mutex_unlock(&mdev->mic_mutex); in mic_probe()
400 mutex_unlock(&mdev->mic_mutex); in mic_probe()
401 mic_bootparam_init(mdev); in mic_probe()
403 mic_create_debug_dir(mdev); in mic_probe()
404 cdev_init(&mdev->cdev, &mic_fops); in mic_probe()
405 mdev->cdev.owner = THIS_MODULE; in mic_probe()
406 rc = cdev_add(&mdev->cdev, MKDEV(MAJOR(g_mic_devno), mdev->id), 1); in mic_probe()
408 dev_err(&pdev->dev, "cdev_add err id %d rc %d\n", mdev->id, rc); in mic_probe()
413 mic_delete_debug_dir(mdev); in mic_probe()
414 mutex_lock(&mdev->mic_mutex); in mic_probe()
415 mic_free_irq(mdev, mdev->shutdown_cookie, mdev); in mic_probe()
416 mutex_unlock(&mdev->mic_mutex); in mic_probe()
418 mic_dp_uninit(mdev); in mic_probe()
420 sysfs_put(mdev->state_sysfs); in mic_probe()
422 device_destroy(g_mic_class, MKDEV(MAJOR(g_mic_devno), mdev->id)); in mic_probe()
424 mic_smpt_uninit(mdev); in mic_probe()
426 mic_free_interrupts(mdev, pdev); in mic_probe()
428 iounmap(mdev->aper.va); in mic_probe()
430 iounmap(mdev->mmio.va); in mic_probe()
436 mic_device_uninit(mdev); in mic_probe()
438 ida_simple_remove(&g_mic_ida, mdev->id); in mic_probe()
440 kfree(mdev); in mic_probe()
455 struct mic_device *mdev; in mic_remove() local
457 mdev = pci_get_drvdata(pdev); in mic_remove()
458 if (!mdev) in mic_remove()
461 mic_stop(mdev, false); in mic_remove()
462 cdev_del(&mdev->cdev); in mic_remove()
463 mic_delete_debug_dir(mdev); in mic_remove()
464 mutex_lock(&mdev->mic_mutex); in mic_remove()
465 mic_free_irq(mdev, mdev->shutdown_cookie, mdev); in mic_remove()
466 mutex_unlock(&mdev->mic_mutex); in mic_remove()
467 flush_work(&mdev->shutdown_work); in mic_remove()
468 mic_dp_uninit(mdev); in mic_remove()
469 sysfs_put(mdev->state_sysfs); in mic_remove()
470 device_destroy(g_mic_class, MKDEV(MAJOR(g_mic_devno), mdev->id)); in mic_remove()
471 mic_smpt_uninit(mdev); in mic_remove()
472 mic_free_interrupts(mdev, pdev); in mic_remove()
473 iounmap(mdev->mmio.va); in mic_remove()
474 iounmap(mdev->aper.va); in mic_remove()
475 mic_device_uninit(mdev); in mic_remove()
478 ida_simple_remove(&g_mic_ida, mdev->id); in mic_remove()
479 kfree(mdev); in mic_remove()