Lines Matching refs:pcidev

42 static int cci_pci_alloc_irq(struct pci_dev *pcidev)  in cci_pci_alloc_irq()  argument
44 int ret, nvec = pci_msix_vec_count(pcidev); in cci_pci_alloc_irq()
47 dev_dbg(&pcidev->dev, "fpga interrupt not supported\n"); in cci_pci_alloc_irq()
51 ret = pci_alloc_irq_vectors(pcidev, nvec, nvec, PCI_IRQ_MSIX); in cci_pci_alloc_irq()
58 static void cci_pci_free_irq(struct pci_dev *pcidev) in cci_pci_free_irq() argument
60 pci_free_irq_vectors(pcidev); in cci_pci_free_irq()
115 static int cci_init_drvdata(struct pci_dev *pcidev) in cci_init_drvdata() argument
119 drvdata = devm_kzalloc(&pcidev->dev, sizeof(*drvdata), GFP_KERNEL); in cci_init_drvdata()
123 pci_set_drvdata(pcidev, drvdata); in cci_init_drvdata()
128 static void cci_remove_feature_devs(struct pci_dev *pcidev) in cci_remove_feature_devs() argument
130 struct cci_drvdata *drvdata = pci_get_drvdata(pcidev); in cci_remove_feature_devs()
134 cci_pci_free_irq(pcidev); in cci_remove_feature_devs()
137 static int *cci_pci_create_irq_table(struct pci_dev *pcidev, unsigned int nvec) in cci_pci_create_irq_table() argument
147 table[i] = pci_irq_vector(pcidev, i); in cci_pci_create_irq_table()
152 static int find_dfls_by_vsec(struct pci_dev *pcidev, struct dfl_fpga_enum_info *info) in find_dfls_by_vsec() argument
158 voff = pci_find_vsec_capability(pcidev, PCI_VENDOR_ID_INTEL, in find_dfls_by_vsec()
161 dev_dbg(&pcidev->dev, "%s no DFL VSEC found\n", __func__); in find_dfls_by_vsec()
166 pci_read_config_dword(pcidev, voff + PCI_VNDR_DFLS_CNT, &dfl_cnt); in find_dfls_by_vsec()
168 dev_err(&pcidev->dev, "%s too many DFLs %d > %d\n", in find_dfls_by_vsec()
175 dev_err(&pcidev->dev, "%s DFL VSEC too big for PCIe config space\n", in find_dfls_by_vsec()
182 pci_read_config_dword(pcidev, dfl_res_off, &dfl_res); in find_dfls_by_vsec()
186 dev_err(&pcidev->dev, "%s bad bir number %d\n", in find_dfls_by_vsec()
192 dev_err(&pcidev->dev, "%s DFL for BAR %d already specified\n", in find_dfls_by_vsec()
199 len = pci_resource_len(pcidev, bir); in find_dfls_by_vsec()
202 dev_err(&pcidev->dev, "%s bad offset %u >= %pa\n", in find_dfls_by_vsec()
207 dev_dbg(&pcidev->dev, "%s BAR %d offset 0x%x\n", __func__, bir, offset); in find_dfls_by_vsec()
211 start = pci_resource_start(pcidev, bir) + offset; in find_dfls_by_vsec()
220 static int find_dfls_by_default(struct pci_dev *pcidev, in find_dfls_by_default() argument
230 base = pcim_iomap_region(pcidev, 0, DRV_NAME); in find_dfls_by_default()
240 start = pci_resource_start(pcidev, 0); in find_dfls_by_default()
241 len = pci_resource_len(pcidev, 0); in find_dfls_by_default()
270 dev_err(&pcidev->dev, "bad BAR %d for port %d\n", in find_dfls_by_default()
276 start = pci_resource_start(pcidev, bar) + offset; in find_dfls_by_default()
277 len = pci_resource_len(pcidev, bar) - offset; in find_dfls_by_default()
282 start = pci_resource_start(pcidev, 0); in find_dfls_by_default()
283 len = pci_resource_len(pcidev, 0); in find_dfls_by_default()
291 pcim_iounmap_region(pcidev, 0); in find_dfls_by_default()
297 static int cci_enumerate_feature_devs(struct pci_dev *pcidev) in cci_enumerate_feature_devs() argument
299 struct cci_drvdata *drvdata = pci_get_drvdata(pcidev); in cci_enumerate_feature_devs()
306 info = dfl_fpga_enum_info_alloc(&pcidev->dev); in cci_enumerate_feature_devs()
311 nvec = cci_pci_alloc_irq(pcidev); in cci_enumerate_feature_devs()
313 dev_err(&pcidev->dev, "Fail to alloc irq %d.\n", nvec); in cci_enumerate_feature_devs()
317 irq_table = cci_pci_create_irq_table(pcidev, nvec); in cci_enumerate_feature_devs()
329 ret = find_dfls_by_vsec(pcidev, info); in cci_enumerate_feature_devs()
331 ret = find_dfls_by_default(pcidev, info); in cci_enumerate_feature_devs()
339 dev_err(&pcidev->dev, "Enumeration failure\n"); in cci_enumerate_feature_devs()
348 cci_pci_free_irq(pcidev); in cci_enumerate_feature_devs()
356 int cci_pci_probe(struct pci_dev *pcidev, const struct pci_device_id *pcidevid) in cci_pci_probe() argument
360 ret = pcim_enable_device(pcidev); in cci_pci_probe()
362 dev_err(&pcidev->dev, "Failed to enable device %d.\n", ret); in cci_pci_probe()
366 pci_set_master(pcidev); in cci_pci_probe()
368 ret = dma_set_mask_and_coherent(&pcidev->dev, DMA_BIT_MASK(64)); in cci_pci_probe()
370 ret = dma_set_mask_and_coherent(&pcidev->dev, DMA_BIT_MASK(32)); in cci_pci_probe()
372 dev_err(&pcidev->dev, "No suitable DMA support available.\n"); in cci_pci_probe()
376 ret = cci_init_drvdata(pcidev); in cci_pci_probe()
378 dev_err(&pcidev->dev, "Fail to init drvdata %d.\n", ret); in cci_pci_probe()
382 ret = cci_enumerate_feature_devs(pcidev); in cci_pci_probe()
384 dev_err(&pcidev->dev, "enumeration failure %d.\n", ret); in cci_pci_probe()
391 static int cci_pci_sriov_configure(struct pci_dev *pcidev, int num_vfs) in cci_pci_sriov_configure() argument
393 struct cci_drvdata *drvdata = pci_get_drvdata(pcidev); in cci_pci_sriov_configure()
401 pci_disable_sriov(pcidev); in cci_pci_sriov_configure()
416 ret = pci_enable_sriov(pcidev, num_vfs); in cci_pci_sriov_configure()
426 static void cci_pci_remove(struct pci_dev *pcidev) in cci_pci_remove() argument
428 if (dev_is_pf(&pcidev->dev)) in cci_pci_remove()
429 cci_pci_sriov_configure(pcidev, 0); in cci_pci_remove()
431 cci_remove_feature_devs(pcidev); in cci_pci_remove()