本文整理汇总了C++中pci_disable_msi函数的典型用法代码示例。如果您正苦于以下问题:C++ pci_disable_msi函数的具体用法?C++ pci_disable_msi怎么用?C++ pci_disable_msi使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pci_disable_msi函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: mei_me_remove
/**
* mei_me_remove - Device Removal Routine
*
* @pdev: PCI device structure
*
* mei_remove is called by the PCI subsystem to alert the driver
* that it should release a PCI device.
*/
static void mei_me_remove(struct pci_dev *pdev)
{
struct mei_device *dev;
struct mei_me_hw *hw;
dev = pci_get_drvdata(pdev);
if (!dev)
return;
if (mei_pg_is_enabled(dev))
pm_runtime_get_noresume(&pdev->dev);
hw = to_me_hw(dev);
dev_dbg(&pdev->dev, "stop\n");
mei_stop(dev);
if (!pci_dev_run_wake(pdev))
mei_me_unset_pm_domain(dev);
/* disable interrupts */
mei_disable_interrupts(dev);
free_irq(pdev->irq, dev);
pci_disable_msi(pdev);
if (hw->mem_addr)
pci_iounmap(pdev, hw->mem_addr);
mei_deregister(dev);
kfree(dev);
pci_release_regions(pdev);
pci_disable_device(pdev);
}
开发者ID:andy-shev,项目名称:linux,代码行数:47,代码来源:pci-me.c
示例2: rtsx_suspend
/*
* power management
*/
static int rtsx_suspend(struct pci_dev *pci, pm_message_t state)
{
struct rtsx_dev *dev = (struct rtsx_dev *)pci_get_drvdata(pci);
struct rtsx_chip *chip;
printk(KERN_INFO "Ready to suspend\n");
if (!dev) {
printk(KERN_ERR "Invalid memory\n");
return 0;
}
mutex_lock(&(dev->dev_mutex));
chip = dev->chip;
rtsx_do_before_power_down(chip, PM_S3);
if (dev->irq >= 0) {
synchronize_irq(dev->irq);
free_irq(dev->irq, (void *)dev);
dev->irq = -1;
}
if (chip->msi_en) {
pci_disable_msi(pci);
}
pci_save_state(pci);
pci_enable_wake(pci, pci_choose_state(pci, state), 1);
pci_disable_device(pci);
pci_set_power_state(pci, pci_choose_state(pci, state));
mutex_unlock(&dev->dev_mutex);
return 0;
}
开发者ID:uran1980,项目名称:RTS5209-linux-driver,代码行数:42,代码来源:rtsx.c
示例3: vfio_msi_disable
static void vfio_msi_disable(struct vfio_pci_device *vdev, bool msix)
{
struct pci_dev *pdev = vdev->pdev;
int i;
vfio_msi_set_block(vdev, 0, vdev->num_ctx, NULL, msix);
for (i = 0; i < vdev->num_ctx; i++) {
virqfd_disable(vdev, &vdev->ctx[i].unmask);
virqfd_disable(vdev, &vdev->ctx[i].mask);
}
if (msix) {
pci_disable_msix(vdev->pdev);
kfree(vdev->msix);
} else
pci_disable_msi(pdev);
vdev->irq_type = VFIO_PCI_NUM_IRQS;
vdev->num_ctx = 0;
kfree(vdev->ctx);
}
开发者ID:7799,项目名称:linux,代码行数:22,代码来源:vfio_pci_intrs.c
示例4: mei_me_remove
/**
* mei_remove - Device Removal Routine
*
* @pdev: PCI device structure
*
* mei_remove is called by the PCI subsystem to alert the driver
* that it should release a PCI device.
*/
static void mei_me_remove(struct pci_dev *pdev)
{
struct mei_device *dev;
struct mei_me_hw *hw;
if (mei_pdev != pdev)
return;
dev = pci_get_drvdata(pdev);
if (!dev)
return;
hw = to_me_hw(dev);
dev_dbg(&pdev->dev, "stop\n");
mei_stop(dev);
mei_pdev = NULL;
/* disable interrupts */
mei_disable_interrupts(dev);
free_irq(pdev->irq, dev);
pci_disable_msi(pdev);
if (hw->mem_addr)
pci_iounmap(pdev, hw->mem_addr);
mei_deregister(dev);
kfree(dev);
pci_release_regions(pdev);
pci_disable_device(pdev);
}
开发者ID:spacex,项目名称:kernel-centos7,代码行数:46,代码来源:pci-me.c
示例5: amdgpu_irq_fini
/**
* amdgpu_irq_fini - tear down driver interrupt info
*
* @adev: amdgpu device pointer
*
* Tears down the work irq handlers, vblank handlers, MSIs, etc. (all asics).
*/
void amdgpu_irq_fini(struct amdgpu_device *adev)
{
unsigned i;
drm_vblank_cleanup(adev->ddev);
if (adev->irq.installed) {
drm_irq_uninstall(adev->ddev);
adev->irq.installed = false;
if (adev->irq.msi_enabled)
pci_disable_msi(adev->pdev);
flush_work(&adev->hotplug_work);
}
for (i = 0; i < AMDGPU_MAX_IRQ_SRC_ID; ++i) {
struct amdgpu_irq_src *src = adev->irq.sources[i];
if (!src)
continue;
kfree(src->enabled_types);
src->enabled_types = NULL;
}
}
开发者ID:WiFiZero,项目名称:ath9k_ocb_linux_4.2.8,代码行数:30,代码来源:amdgpu_irq.c
示例6: i2c_vr_remove
static void i2c_vr_remove(struct pci_dev *dev)
{
struct i2c_vr_regs __iomem *regs;
/* disable device */
regs = i2c_vr[0].regs;
writel(0, ®s->icr);
regs = i2c_vr[1].regs;
writel(0, ®s->icr);
pci_set_drvdata(dev, NULL);
i2c_del_adapter(&i2c_vr[1].adap);
i2c_del_adapter(&i2c_vr[0].adap);
free_irq(dev->irq, i2c_vr);
pci_disable_msi(dev);
i2c_vr_unmapregs(dev, 1);
i2c_vr_unmapregs(dev, 0);
pci_release_regions(dev);
pci_disable_device(dev);
}
开发者ID:prime5711,项目名称:blackbox,代码行数:23,代码来源:i2c-vr.c
示例7: chd_dec_enable_int
static int chd_dec_enable_int(struct crystalhd_adp *adp)
{
int rc = 0;
if (!adp || !adp->pdev) {
BCMLOG_ERR("Invalid arg!!\n");
return -EINVAL;
}
if (adp->pdev->msi_enabled)
adp->msi = 1;
else
adp->msi = pci_enable_msi(adp->pdev);
rc = request_irq(adp->pdev->irq, chd_dec_isr, IRQF_SHARED,
adp->name, (void *)adp);
if (rc) {
BCMLOG_ERR("Interrupt request failed..\n");
pci_disable_msi(adp->pdev);
}
return rc;
}
开发者ID:12rafael,项目名称:jellytimekernel,代码行数:23,代码来源:crystalhd_lnx.c
示例8: xen_pcibk_disable_msi
static
int xen_pcibk_disable_msi(struct xen_pcibk_device *pdev,
struct pci_dev *dev, struct xen_pci_op *op)
{
if (unlikely(verbose_request))
printk(KERN_DEBUG DRV_NAME ": %s: disable MSI\n",
pci_name(dev));
if (dev->msi_enabled) {
struct xen_pcibk_dev_data *dev_data;
pci_disable_msi(dev);
dev_data = pci_get_drvdata(dev);
if (dev_data)
dev_data->ack_intr = 1;
}
op->value = dev->irq ? xen_pirq_from_irq(dev->irq) : 0;
if (unlikely(verbose_request))
printk(KERN_DEBUG DRV_NAME ": %s: MSI: %d\n", pci_name(dev),
op->value);
return 0;
}
开发者ID:andy-padavan,项目名称:rt-n56u,代码行数:23,代码来源:pciback_ops.c
示例9: atomisp_pci_remove
static void __devexit atomisp_pci_remove(struct pci_dev *dev)
{
struct atomisp_device *isp = (struct atomisp_device *)
pci_get_drvdata(dev);
pm_runtime_forbid(&dev->dev);
pm_runtime_get_noresume(&dev->dev);
pm_qos_remove_request(&isp->pm_qos);
atomisp_msi_irq_uninit(isp, dev);
free_irq(dev->irq, isp);
pci_disable_msi(dev);
pci_dev_put(isp->hw_contex.pci_root);
atomisp_unregister_entities(isp);
flush_workqueue(isp->work_queue);
destroy_workqueue(isp->work_queue);
iounmap(atomisp_io_base);
pci_set_drvdata(dev, NULL);
pci_release_region(dev, 0);
pci_disable_device(dev);
/* in case user forget to close */
/*
* fixing me:
* MRFLD VP does not use firmware loading
* from file system
*/
if (!IS_MRFLD)
release_firmware(isp->firmware);
hmm_pool_unregister(HMM_POOL_TYPE_RESERVED);
kfree(isp);
}
开发者ID:kamarush,项目名称:ZTE_GXIn_Kernel-3.0.8,代码行数:37,代码来源:atomisp_v4l2.c
示例10: rtsx_release_resources
/* Release all our dynamic resources */
static void rtsx_release_resources(struct rtsx_dev *dev)
{
dev_info(&dev->pci->dev, "-- %s\n", __func__);
/* Tell the control thread to exit. The SCSI host must
* already have been removed so it won't try to queue
* any more commands.
*/
dev_info(&dev->pci->dev, "-- sending exit command to thread\n");
complete(&dev->cmnd_ready);
if (dev->ctl_thread)
wait_for_completion(&dev->control_exit);
if (dev->polling_thread)
wait_for_completion(&dev->polling_exit);
wait_timeout(200);
if (dev->rtsx_resv_buf) {
dma_free_coherent(&(dev->pci->dev), RTSX_RESV_BUF_LEN,
dev->rtsx_resv_buf, dev->rtsx_resv_buf_addr);
dev->chip->host_cmds_ptr = NULL;
dev->chip->host_sg_tbl_ptr = NULL;
}
if (dev->irq > 0)
free_irq(dev->irq, (void *)dev);
if (dev->chip->msi_en)
pci_disable_msi(dev->pci);
if (dev->remap_addr)
iounmap(dev->remap_addr);
pci_disable_device(dev->pci);
pci_release_regions(dev->pci);
rtsx_release_chip(dev->chip);
kfree(dev->chip);
}
开发者ID:alisheikh,项目名称:ktsan,代码行数:38,代码来源:rtsx.c
示例11: mei_txe_remove
/**
* mei_txe_remove - Device Removal Routine
*
* @pdev: PCI device structure
*
* mei_remove is called by the PCI subsystem to alert the driver
* that it should release a PCI device.
*/
static void mei_txe_remove(struct pci_dev *pdev)
{
struct mei_device *dev;
struct mei_txe_hw *hw;
dev = pci_get_drvdata(pdev);
if (!dev) {
dev_err(&pdev->dev, "mei: dev =NULL\n");
return;
}
pm_runtime_get_noresume(&pdev->dev);
hw = to_txe_hw(dev);
mei_stop(dev);
if (!pci_dev_run_wake(pdev))
mei_txe_unset_pm_domain(dev);
/* disable interrupts */
mei_disable_interrupts(dev);
free_irq(pdev->irq, dev);
pci_disable_msi(pdev);
pci_set_drvdata(pdev, NULL);
mei_txe_pci_iounmap(pdev, hw);
mei_deregister(dev);
kfree(dev);
pci_release_regions(pdev);
pci_disable_device(pdev);
}
开发者ID:mhei,项目名称:linux,代码行数:44,代码来源:pci-txe.c
示例12: bcwc_pci_remove
static void bcwc_pci_remove(struct pci_dev *pdev)
{
struct bcwc_private *dev_priv;
dev_priv = pci_get_drvdata(pdev);
if (dev_priv) {
bcwc_irq_disable(dev_priv);
pci_disable_msi(pdev);
if (dev_priv->s2_io)
iounmap(dev_priv->s2_io);
if (dev_priv->s2_mem)
iounmap(dev_priv->s2_mem);
if (dev_priv->isp_io)
iounmap(dev_priv->isp_io);
pci_release_region(pdev, BCWC_PCI_S2_IO);
pci_release_region(pdev, BCWC_PCI_S2_MEM);
pci_release_region(pdev, BCWC_PCI_ISP_IO);
}
pci_disable_device(pdev);
}
开发者ID:ddcc,项目名称:bcwc_pcie,代码行数:24,代码来源:bcwc_drv.c
示例13: ddb_remove
static void __devexit ddb_remove(struct pci_dev *pdev)
{
struct ddb *dev = (struct ddb *) pci_get_drvdata(pdev);
ddb_ports_detach(dev);
ddb_i2c_release(dev);
ddbwritel(dev, 0, INTERRUPT_ENABLE);
ddbwritel(dev, 0, MSI1_ENABLE);
if (dev->msi == 2)
free_irq(dev->pdev->irq + 1, dev);
free_irq(dev->pdev->irq, dev);
#ifdef CONFIG_PCI_MSI
if (dev->msi)
pci_disable_msi(dev->pdev);
#endif
ddb_ports_release(dev);
ddb_buffers_free(dev);
ddb_device_destroy(dev);
ddb_unmap(dev);
pci_set_drvdata(pdev, 0);
pci_disable_device(pdev);
}
开发者ID:flensrocker,项目名称:dddvb,代码行数:24,代码来源:ddbridge.c
示例14: pci_endpoint_test_probe
//.........这里部分代码省略.........
test_reg_bar = data->test_reg_bar;
test->alignment = data->alignment;
no_msi = data->no_msi;
}
init_completion(&test->irq_raised);
mutex_init(&test->mutex);
err = pci_enable_device(pdev);
if (err) {
dev_err(dev, "Cannot enable PCI device\n");
return err;
}
err = pci_request_regions(pdev, DRV_MODULE_NAME);
if (err) {
dev_err(dev, "Cannot obtain PCI resources\n");
goto err_disable_pdev;
}
pci_set_master(pdev);
if (!no_msi) {
irq = pci_alloc_irq_vectors(pdev, 1, 32, PCI_IRQ_MSI);
if (irq < 0)
dev_err(dev, "failed to get MSI interrupts\n");
}
err = devm_request_irq(dev, pdev->irq, pci_endpoint_test_irqhandler,
IRQF_SHARED, DRV_MODULE_NAME, test);
if (err) {
dev_err(dev, "failed to request IRQ %d\n", pdev->irq);
goto err_disable_msi;
}
for (i = 1; i < irq; i++) {
err = devm_request_irq(dev, pdev->irq + i,
pci_endpoint_test_irqhandler,
IRQF_SHARED, DRV_MODULE_NAME, test);
if (err)
dev_err(dev, "failed to request IRQ %d for MSI %d\n",
pdev->irq + i, i + 1);
}
for (bar = BAR_0; bar <= BAR_5; bar++) {
base = pci_ioremap_bar(pdev, bar);
if (!base) {
dev_err(dev, "failed to read BAR%d\n", bar);
WARN_ON(bar == test_reg_bar);
}
test->bar[bar] = base;
}
test->base = test->bar[test_reg_bar];
if (!test->base) {
dev_err(dev, "Cannot perform PCI test without BAR%d\n",
test_reg_bar);
goto err_iounmap;
}
pci_set_drvdata(pdev, test);
id = ida_simple_get(&pci_endpoint_test_ida, 0, 0, GFP_KERNEL);
if (id < 0) {
dev_err(dev, "unable to get id\n");
goto err_iounmap;
}
snprintf(name, sizeof(name), DRV_MODULE_NAME ".%d", id);
misc_device = &test->miscdev;
misc_device->minor = MISC_DYNAMIC_MINOR;
misc_device->name = name;
misc_device->fops = &pci_endpoint_test_fops,
err = misc_register(misc_device);
if (err) {
dev_err(dev, "failed to register device\n");
goto err_ida_remove;
}
return 0;
err_ida_remove:
ida_simple_remove(&pci_endpoint_test_ida, id);
err_iounmap:
for (bar = BAR_0; bar <= BAR_5; bar++) {
if (test->bar[bar])
pci_iounmap(pdev, test->bar[bar]);
}
err_disable_msi:
pci_disable_msi(pdev);
pci_release_regions(pdev);
err_disable_pdev:
pci_disable_device(pdev);
return err;
}
开发者ID:mkrufky,项目名称:linux,代码行数:101,代码来源:pci_endpoint_test.c
示例15: adf_disable_msi
/*
* adf_disable_msi
* Function disables MSI capability
*/
STATIC void adf_disable_msi(icp_accel_pci_info_t *pci_dev_info)
{
ADF_DEBUG("Disabling MSI capability\n");
pci_disable_msi(pci_dev_info->pDev);
pci_dev_info->irq = pci_dev_info->pDev->irq;
}
开发者ID:lecoq,项目名称:qat_c2xxx,代码行数:10,代码来源:adf_acceldev_isr.c
示例16: mei_me_probe
//.........这里部分代码省略.........
goto disable_device;
}
if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)) ||
dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64))) {
err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
if (err)
err = dma_set_coherent_mask(&pdev->dev,
DMA_BIT_MASK(32));
}
if (err) {
dev_err(&pdev->dev, "No usable DMA configuration, aborting\n");
goto release_regions;
}
/* allocates and initializes the mei dev structure */
dev = mei_me_dev_init(pdev, cfg);
if (!dev) {
err = -ENOMEM;
goto release_regions;
}
hw = to_me_hw(dev);
/* mapping IO device memory */
hw->mem_addr = pci_iomap(pdev, 0, 0);
if (!hw->mem_addr) {
dev_err(&pdev->dev, "mapping I/O device memory failure.\n");
err = -ENOMEM;
goto free_device;
}
pci_enable_msi(pdev);
/* request and enable interrupt */
if (pci_dev_msi_enabled(pdev))
err = request_threaded_irq(pdev->irq,
NULL,
mei_me_irq_thread_handler,
IRQF_ONESHOT, KBUILD_MODNAME, dev);
else
err = request_threaded_irq(pdev->irq,
mei_me_irq_quick_handler,
mei_me_irq_thread_handler,
IRQF_SHARED, KBUILD_MODNAME, dev);
if (err) {
dev_err(&pdev->dev, "request_threaded_irq failure. irq = %d\n",
pdev->irq);
goto disable_msi;
}
if (mei_start(dev)) {
dev_err(&pdev->dev, "init hw failure.\n");
err = -ENODEV;
goto release_irq;
}
pm_runtime_set_autosuspend_delay(&pdev->dev, MEI_ME_RPM_TIMEOUT);
pm_runtime_use_autosuspend(&pdev->dev);
err = mei_register(dev, &pdev->dev);
if (err)
goto release_irq;
pci_set_drvdata(pdev, dev);
schedule_delayed_work(&dev->timer_work, HZ);
/*
* For not wake-able HW runtime pm framework
* can't be used on pci device level.
* Use domain runtime pm callbacks instead.
*/
if (!pci_dev_run_wake(pdev))
mei_me_set_pm_domain(dev);
if (mei_pg_is_enabled(dev))
pm_runtime_put_noidle(&pdev->dev);
dev_dbg(&pdev->dev, "initialization successful.\n");
return 0;
release_irq:
mei_cancel_work(dev);
mei_disable_interrupts(dev);
free_irq(pdev->irq, dev);
disable_msi:
pci_disable_msi(pdev);
pci_iounmap(pdev, hw->mem_addr);
free_device:
kfree(dev);
release_regions:
pci_release_regions(pdev);
disable_device:
pci_disable_device(pdev);
end:
dev_err(&pdev->dev, "initialization failed.\n");
return err;
}
开发者ID:VonLion,项目名称:linux,代码行数:101,代码来源:pci-me.c
示例17: ddb_probe
//.........这里部分代码省略.........
stat = pci_enable_msi_block(dev->pdev, 2);
if (stat == 0) {
dev->msi = 1;
pr_info("DDBrige using 2 MSI interrupts\n");
}
if (stat == 1)
stat = pci_enable_msi(dev->pdev);
if (stat < 0) {
pr_info(": MSI not available.\n");
} else {
irq_flag = 0;
dev->msi++;
}
}
if (dev->msi == 2) {
stat = request_irq(dev->pdev->irq, irq_handler0,
irq_flag, "ddbridge", (void *) dev);
if (stat < 0)
goto fail0;
stat = request_irq(dev->pdev->irq + 1, irq_handler1,
irq_flag, "ddbridge", (void *) dev);
if (stat < 0) {
free_irq(dev->pdev->irq, dev);
goto fail0;
}
} else
#endif
{
#ifdef DDB_TEST_THREADED
stat = request_threaded_irq(dev->pdev->irq, irq_handler,
irq_thread,
irq_flag,
"ddbridge", (void *) dev);
#else
stat = request_irq(dev->pdev->irq, irq_handler,
irq_flag, "ddbridge", (void *) dev);
#endif
if (stat < 0)
goto fail0;
}
ddbwritel(dev, 0, DMA_BASE_READ);
if (dev->info->type != DDB_MOD)
ddbwritel(dev, 0, DMA_BASE_WRITE);
/*ddbwritel(dev, 0xffffffff, INTERRUPT_ACK);*/
if (dev->msi == 2) {
ddbwritel(dev, 0x0fffff00, INTERRUPT_ENABLE);
ddbwritel(dev, 0x0000000f, MSI1_ENABLE);
} else {
ddbwritel(dev, 0x0fffff0f, INTERRUPT_ENABLE);
ddbwritel(dev, 0x00000000, MSI1_ENABLE);
}
if (ddb_i2c_init(dev) < 0)
goto fail1;
ddb_ports_init(dev);
if (ddb_buffers_alloc(dev) < 0) {
pr_info(": Could not allocate buffer memory\n");
goto fail2;
}
if (ddb_ports_attach(dev) < 0)
goto fail3;
/* ignore if this fails */
ddb_device_create(dev);
if (dev->info->fan_num) {
ddbwritel(dev, 1, GPIO_DIRECTION);
ddbwritel(dev, 1, GPIO_OUTPUT);
}
if (dev->info->type == DDB_MOD)
ddbridge_mod_init(dev);
return 0;
fail3:
ddb_ports_detach(dev);
pr_err("fail3\n");
ddb_ports_release(dev);
fail2:
pr_err("fail2\n");
ddb_buffers_free(dev);
ddb_i2c_release(dev);
fail1:
pr_err("fail1\n");
ddbwritel(dev, 0, INTERRUPT_ENABLE);
ddbwritel(dev, 0, MSI1_ENABLE);
free_irq(dev->pdev->irq, dev);
if (dev->msi == 2)
free_irq(dev->pdev->irq + 1, dev);
fail0:
pr_err("fail0\n");
if (dev->msi)
pci_disable_msi(dev->pdev);
fail:
pr_err("fail\n");
ddb_unmap(dev);
pci_set_drvdata(pdev, 0);
pci_disable_device(pdev);
return -1;
}
开发者ID:flensrocker,项目名称:dddvb,代码行数:101,代码来源:ddbridge.c
示例18: atomisp_pci_probe
//.........这里部分代码省略.........
goto load_fw_fail;
}
}
err = atomisp_initialize_modules(isp);
if (err < 0) {
v4l2_err(&atomisp_dev, "atomisp_initialize_modules\n");
goto init_mod_fail;
}
err = atomisp_register_entities(isp);
if (err < 0) {
v4l2_err(&atomisp_dev, "atomisp_register_entities failed\n");
goto init_mod_fail;
}
init_completion(&isp->wq_frame_complete);
init_completion(&isp->dis_state_complete);
spin_lock_init(&isp->irq_lock);
isp->work_queue = create_singlethread_workqueue(isp->v4l2_dev.name);
if (isp->work_queue == NULL) {
v4l2_err(&atomisp_dev, "Failed to initialize work queue\n");
goto work_queue_fail;
}
INIT_WORK(&isp->work, atomisp_work);
isp->hw_contex.ispmmadr = start;
pci_set_master(dev);
atomisp_io_base = base;
isp->tvnorm = tvnorms;
mutex_init(&isp->input_lock);
/* isp_lock is to protect race access of css functions */
mutex_init(&isp->isp_lock);
isp->sw_contex.updating_uptr = false;
isp->isp3a_stat_ready = false;
pci_set_drvdata(dev, isp);
err = pci_enable_msi(dev);
if (err) {
v4l2_err(&atomisp_dev,
"Failed to enable msi\n");
goto enable_msi_fail;
}
err = request_irq(dev->irq, atomisp_isr,
IRQF_SHARED, "isp_irq", isp);
if (err) {
v4l2_err(&atomisp_dev,
"Failed to request irq\n");
goto request_irq_fail;
}
setup_timer(&isp->wdt, atomisp_wdt_wakeup_dog, (unsigned long)isp);
atomisp_msi_irq_init(isp, dev);
pm_qos_add_request(&isp->pm_qos, PM_QOS_CPU_DMA_LATENCY,
PM_QOS_DEFAULT_VALUE);
/*
* fixing me!
* MRFLD VP does not implement
* PM Core
*/
#ifdef CONFIG_PM
if (!IS_MRFLD) {
pm_runtime_put_noidle(&dev->dev);
pm_runtime_allow(&dev->dev);
}
#endif
isp->sw_contex.probed = true;
err = hmm_pool_register(repool_pgnr, HMM_POOL_TYPE_RESERVED);
if (err)
v4l2_err(&atomisp_dev,
"Failed to register reserved memory pool.\n");
return 0;
request_irq_fail:
pci_disable_msi(dev);
enable_msi_fail:
pci_set_drvdata(dev, NULL);
destroy_workqueue(isp->work_queue);
work_queue_fail:
atomisp_unregister_entities(isp);
init_mod_fail:
release_firmware(isp->firmware);
load_fw_fail:
kfree(isp);
kzalloc_fail:
iounmap(base);
ioremap_fail:
pci_release_region(dev, 0);
request_region_fail:
pci_disable_device(dev);
return err;
}
开发者ID:kamarush,项目名称:ZTE_GXIn_Kernel-3.0.8,代码行数:101,代码来源:atomisp_v4l2.c
示例19: ndev_init_isr
static int ndev_init_isr(struct amd_ntb_dev *ndev,
int msix_min, int msix_max)
{
struct pci_dev *pdev;
int rc, i, msix_count, node;
pdev = ndev->ntb.pdev;
node = dev_to_node(&pdev->dev);
ndev->db_mask = ndev->db_valid_mask;
/* Try to set up msix irq */
ndev->vec = kcalloc_node(msix_max, sizeof(*ndev->vec),
GFP_KERNEL, node);
if (!ndev->vec)
goto err_msix_vec_alloc;
ndev->msix = kcalloc_node(msix_max, sizeof(*ndev->msix),
GFP_KERNEL, node);
if (!ndev->msix)
goto err_msix_alloc;
for (i = 0; i < msix_max; ++i)
ndev->msix[i].entry = i;
msix_count = pci_enable_msix_range(pdev, ndev->msix,
msix_min, msix_max);
if (msix_count < 0)
goto err_msix_enable;
/* NOTE: Disable MSIX if msix count is less than 16 because of
* hardware limitation.
*/
if (msix_count < msix_min) {
pci_disable_msix(pdev);
goto err_msix_enable;
}
for (i = 0; i < msix_count; ++i) {
ndev->vec[i].ndev = ndev;
ndev->vec[i].num = i;
rc = request_irq(ndev->msix[i].vector, ndev_vec_isr, 0,
"ndev_vec_isr", &ndev->vec[i]);
if (rc)
goto err_msix_request;
}
dev_dbg(&pdev->dev, "Using msix interrupts\n");
ndev->db_count = msix_min;
ndev->msix_vec_count = msix_max;
return 0;
err_msix_request:
while (i-- > 0)
free_irq(ndev->msix[i].vector, &ndev->vec[i]);
pci_disable_msix(pdev);
err_msix_enable:
kfree(ndev->msix);
err_msix_alloc:
kfree(ndev->vec);
err_msix_vec_alloc:
ndev->msix = NULL;
ndev->vec = NULL;
/* Try to set up msi irq */
rc = pci_enable_msi(pdev);
if (rc)
goto err_msi_enable;
rc = request_irq(pdev->irq, ndev_irq_isr, 0,
"ndev_irq_isr", ndev);
if (rc)
goto err_msi_request;
dev_dbg(&pdev->dev, "Using msi interrupts\n");
ndev->db_count = 1;
ndev->msix_vec_count = 1;
return 0;
err_msi_request:
pci_disable_msi(pdev);
err_msi_enable:
/* Try to set up intx irq */
pci_intx(pdev, 1);
rc = request_irq(pdev->irq, ndev_irq_isr, IRQF_SHARED,
"ndev_irq_isr", ndev);
if (rc)
goto err_intx_request;
dev_dbg(&pdev->dev, "Using intx interrupts\n");
ndev->db_count = 1;
ndev->msix_vec_count = 1;
return 0;
err_intx_request:
return rc;
}
开发者ID:grate-driver,项目名称:linux,代码行数:100,代码来源:ntb_hw_amd.c
示例20: bcwc_pci_probe
static int bcwc_pci_probe(struct pci_dev *pdev,
const struct pci_device_id *entry)
{
struct bcwc_private *dev_priv;
int ret;
dev_info(&pdev->dev, "Found Broadcom PCIe webcam with device id: %x\n",
pdev->device);
dev_priv = kzalloc(sizeof(struct bcwc_private), GFP_KERNEL);
if (!dev_priv) {
dev_err(&pdev->dev, "Failed to allocate memory\n");
return -ENOMEM;
}
dev_priv->pdev = pdev;
ret = pci_enable_device(pdev);
if (ret) {
dev_err(&pdev->dev, "Failed to enable device\n");
goto fail_free;
}
ret = bcwc_pci_reserve_mem(dev_priv);
if (ret)
goto fail_enable;
ret = pci_enable_msi(pdev);
if (ret) {
dev_err(&pdev->dev, "Failed to enable MSI\n");
goto fail_enable;
}
INIT_WORK(&dev_priv->irq_work, bcwc_irq_work);
ret = bcwc_irq_enable(dev_priv);
if (ret)
goto fail_msi;
ret = bcwc_pci_set_dma_mask(dev_priv, 64);
if (ret)
ret = bcwc_pci_set_dma_mask(dev_priv, 32);
if (ret)
goto fail_msi;
dev_info(&pdev->dev, "Setting %ubit DMA mask\n", dev_priv->dma_mask);
pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(dev_priv->dma_mask));
pci_set_master(pdev);
pci_set_drvdata(pdev, dev_priv);
dev_priv->ddr_model = 4;
dev_priv->ddr_speed = 450;
bcwc_hw_init(dev_priv);
return 0;
fail_msi:
pci_disable_msi(pdev);
fail_enable:
pci_disable_device(pdev);
fail_free:
kfree(dev_priv);
return ret;
}
开发者ID:ddcc,项目名称:bcwc_pcie,代码行数:66,代码来源:bcwc_drv.c
注:本文中的pci_disable_msi函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论