Lines Matching refs:pdev

31 static int sel_ide_offset(struct pci_dev *pdev,  in sel_ide_offset()  argument
34 return __sel_ide_offset(pdev->ide_cap, pdev->nr_link_ide, in sel_ide_offset()
35 settings->stream_index, pdev->nr_ide_mem); in sel_ide_offset()
38 static bool reserve_stream_index(struct pci_dev *pdev, u8 idx) in reserve_stream_index() argument
42 ret = ida_alloc_range(&pdev->ide_stream_ida, idx, idx, GFP_KERNEL); in reserve_stream_index()
55 struct pci_dev *pdev, u8 stream_idx) in claim_stream() argument
67 if (!pdev) in claim_stream()
70 if (!reserve_stream_index(pdev, stream_idx)) { in claim_stream()
71 pci_info(pdev, "Failed to claim active Selective Stream %d\n", in claim_stream()
79 void pci_ide_init(struct pci_dev *pdev) in pci_ide_init() argument
81 struct pci_host_bridge *hb = pci_find_host_bridge(pdev->bus); in pci_ide_init()
90 ida_init(&pdev->ide_stream_ida); in pci_ide_init()
92 if (!pci_is_pcie(pdev)) in pci_ide_init()
95 ide_cap = pci_find_ext_capability(pdev, PCI_EXT_CAP_ID_IDE); in pci_ide_init()
99 pci_read_config_dword(pdev, ide_cap + PCI_IDE_CAP, &val); in pci_ide_init()
107 if (pci_pcie_type(pdev) == PCI_EXP_TYPE_ENDPOINT) { in pci_ide_init()
108 struct pci_dev *rp = pcie_find_root_port(pdev); in pci_ide_init()
114 pdev->ide_cfg = FIELD_GET(PCI_IDE_CAP_SEL_CFG, val); in pci_ide_init()
115 pdev->ide_tee_limit = FIELD_GET(PCI_IDE_CAP_TEE_LIMITED, val); in pci_ide_init()
130 pci_read_config_dword(pdev, pos + PCI_IDE_SEL_CAP, &val); in pci_ide_init()
138 pci_info(pdev, "Unsupported Selective Stream %d capability, SKIP the rest\n", i); in pci_ide_init()
149 pci_read_config_dword(pdev, pos + PCI_IDE_SEL_CTL, &val); in pci_ide_init()
152 !claim_stream(hb, id, pdev, i)) in pci_ide_init()
161 pci_read_config_dword(pdev, pos + PCI_IDE_LINK_CTL_0, &val); in pci_ide_init()
171 pci_read_config_dword(pdev, pos + PCI_IDE_SEL_CAP, &val); in pci_ide_init()
176 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_CTL, val); in pci_ide_init()
183 pci_read_config_dword(pdev, pos, &val); in pci_ide_init()
188 pci_write_config_dword(pdev, pos, val); in pci_ide_init()
191 pdev->ide_cap = ide_cap; in pci_ide_init()
192 pdev->nr_link_ide = nr_link_ide; in pci_ide_init()
193 pdev->nr_sel_ide = nr_streams; in pci_ide_init()
194 pdev->nr_ide_mem = nr_ide_mem; in pci_ide_init()
242 struct pci_ide *pci_ide_stream_alloc(struct pci_dev *pdev) in pci_ide_stream_alloc() argument
253 if (!pci_is_pcie(pdev)) in pci_ide_stream_alloc()
256 if (pci_pcie_type(pdev) != PCI_EXP_TYPE_ENDPOINT) in pci_ide_stream_alloc()
259 if (!pdev->ide_cap) in pci_ide_stream_alloc()
266 hb = pci_find_host_bridge(pdev->bus); in pci_ide_stream_alloc()
272 rp = pcie_find_root_port(pdev); in pci_ide_stream_alloc()
279 &pdev->ide_stream_ida, pdev->nr_sel_ide, &__stream[PCI_IDE_EP]); in pci_ide_stream_alloc()
284 num_vf = pci_num_vf(pdev); in pci_ide_stream_alloc()
286 rid_end = PCI_DEVID(pci_iov_virtfn_bus(pdev, num_vf), in pci_ide_stream_alloc()
287 pci_iov_virtfn_devfn(pdev, num_vf)); in pci_ide_stream_alloc()
289 rid_end = pci_dev_id(pdev); in pci_ide_stream_alloc()
291 br = pci_upstream_bridge(pdev); in pci_ide_stream_alloc()
307 .pdev = pdev, in pci_ide_stream_alloc()
318 .rid_start = pci_dev_id(pdev), in pci_ide_stream_alloc()
343 struct pci_dev *pdev = ide->pdev; in pci_ide_stream_free() local
344 struct pci_dev *rp = pcie_find_root_port(pdev); in pci_ide_stream_free()
345 struct pci_host_bridge *hb = pci_find_host_bridge(pdev->bus); in pci_ide_stream_free()
347 ida_free(&pdev->ide_stream_ida, ide->partner[PCI_IDE_EP].stream_index); in pci_ide_stream_free()
367 struct pci_dev *pdev = ide->pdev; in pci_ide_stream_release() local
368 struct pci_dev *rp = pcie_find_root_port(pdev); in pci_ide_stream_release()
374 pci_ide_stream_disable(pdev, ide); in pci_ide_stream_release()
383 pci_ide_stream_teardown(pdev, ide); in pci_ide_stream_release()
424 struct pci_dev *pdev = ide->pdev; in pci_ide_stream_register() local
425 struct pci_host_bridge *hb = pci_find_host_bridge(pdev->bus); in pci_ide_stream_register()
431 pci_err(pdev, "Setup fail: Invalid Stream ID: %d\n", ide->stream_id); in pci_ide_stream_register()
438 pci_err(pdev, "Setup fail: Stream ID %d in use\n", ide->stream_id); in pci_ide_stream_register()
450 rc = sysfs_create_link(&hb->dev.kobj, &pdev->dev.kobj, name); in pci_ide_stream_register()
472 struct pci_dev *pdev = ide->pdev; in pci_ide_stream_unregister() local
473 struct pci_host_bridge *hb = pci_find_host_bridge(pdev->bus); in pci_ide_stream_unregister()
482 static int pci_ide_domain(struct pci_dev *pdev) in pci_ide_domain() argument
484 if (pdev->fm_enabled) in pci_ide_domain()
485 return pci_domain_nr(pdev->bus); in pci_ide_domain()
489 struct pci_ide_partner *pci_ide_to_settings(struct pci_dev *pdev, struct pci_ide *ide) in pci_ide_to_settings() argument
491 if (!pci_is_pcie(pdev)) { in pci_ide_to_settings()
492 pci_warn_once(pdev, "not a PCIe device\n"); in pci_ide_to_settings()
496 switch (pci_pcie_type(pdev)) { in pci_ide_to_settings()
498 if (pdev != ide->pdev) { in pci_ide_to_settings()
499 pci_warn_once(pdev, "setup expected Endpoint: %s\n", pci_name(ide->pdev)); in pci_ide_to_settings()
504 struct pci_dev *rp = pcie_find_root_port(ide->pdev); in pci_ide_to_settings()
506 if (pdev != rp) { in pci_ide_to_settings()
507 pci_warn_once(pdev, "setup expected Root Port: %s\n", in pci_ide_to_settings()
514 pci_warn_once(pdev, "invalid device type\n"); in pci_ide_to_settings()
520 static void set_ide_sel_ctl(struct pci_dev *pdev, struct pci_ide *ide, in set_ide_sel_ctl() argument
526 FIELD_PREP(PCI_IDE_SEL_CTL_CFG_EN, pdev->ide_cfg) | in set_ide_sel_ctl()
527 FIELD_PREP(PCI_IDE_SEL_CTL_TEE_LIMITED, pdev->ide_tee_limit) | in set_ide_sel_ctl()
530 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_CTL, val); in set_ide_sel_ctl()
559 static void pci_ide_stream_to_regs(struct pci_dev *pdev, struct pci_ide *ide, in pci_ide_stream_to_regs() argument
562 struct pci_ide_partner *settings = pci_ide_to_settings(pdev, ide); in pci_ide_stream_to_regs()
574 FIELD_PREP(PCI_IDE_SEL_RID_2_SEG, pci_ide_domain(pdev)); in pci_ide_stream_to_regs()
576 if (pdev->nr_ide_mem && pci_bus_region_size(&settings->mem_assoc)) { in pci_ide_stream_to_regs()
581 if (pdev->nr_ide_mem > assoc_idx && in pci_ide_stream_to_regs()
600 void pci_ide_stream_setup(struct pci_dev *pdev, struct pci_ide *ide) in pci_ide_stream_setup() argument
602 struct pci_ide_partner *settings = pci_ide_to_settings(pdev, ide); in pci_ide_stream_setup()
609 pci_ide_stream_to_regs(pdev, ide, &regs); in pci_ide_stream_setup()
611 pos = sel_ide_offset(pdev, settings); in pci_ide_stream_setup()
613 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_RID_1, regs.rid1); in pci_ide_stream_setup()
614 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_RID_2, regs.rid2); in pci_ide_stream_setup()
617 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_ADDR_1(i), in pci_ide_stream_setup()
619 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_ADDR_2(i), in pci_ide_stream_setup()
621 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_ADDR_3(i), in pci_ide_stream_setup()
626 for (int i = regs.nr_addr; i < pdev->nr_ide_mem; i++) { in pci_ide_stream_setup()
627 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_ADDR_1(i), 0); in pci_ide_stream_setup()
628 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_ADDR_2(i), 0); in pci_ide_stream_setup()
629 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_ADDR_3(i), 0); in pci_ide_stream_setup()
636 set_ide_sel_ctl(pdev, ide, settings, pos, false); in pci_ide_stream_setup()
650 void pci_ide_stream_teardown(struct pci_dev *pdev, struct pci_ide *ide) in pci_ide_stream_teardown() argument
652 struct pci_ide_partner *settings = pci_ide_to_settings(pdev, ide); in pci_ide_stream_teardown()
658 pos = sel_ide_offset(pdev, settings); in pci_ide_stream_teardown()
660 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_CTL, 0); in pci_ide_stream_teardown()
662 for (i = 0; i < pdev->nr_ide_mem; i++) { in pci_ide_stream_teardown()
663 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_ADDR_1(i), 0); in pci_ide_stream_teardown()
664 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_ADDR_2(i), 0); in pci_ide_stream_teardown()
665 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_ADDR_3(i), 0); in pci_ide_stream_teardown()
668 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_RID_2, 0); in pci_ide_stream_teardown()
669 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_RID_1, 0); in pci_ide_stream_teardown()
691 int pci_ide_stream_enable(struct pci_dev *pdev, struct pci_ide *ide) in pci_ide_stream_enable() argument
693 struct pci_ide_partner *settings = pci_ide_to_settings(pdev, ide); in pci_ide_stream_enable()
700 pos = sel_ide_offset(pdev, settings); in pci_ide_stream_enable()
702 set_ide_sel_ctl(pdev, ide, settings, pos, true); in pci_ide_stream_enable()
705 pci_read_config_dword(pdev, pos + PCI_IDE_SEL_STS, &val); in pci_ide_stream_enable()
722 void pci_ide_stream_disable(struct pci_dev *pdev, struct pci_ide *ide) in pci_ide_stream_disable() argument
724 struct pci_ide_partner *settings = pci_ide_to_settings(pdev, ide); in pci_ide_stream_disable()
730 pos = sel_ide_offset(pdev, settings); in pci_ide_stream_disable()
732 pci_write_config_dword(pdev, pos + PCI_IDE_SEL_CTL, 0); in pci_ide_stream_disable()
812 void pci_ide_destroy(struct pci_dev *pdev) in pci_ide_destroy() argument
814 ida_destroy(&pdev->ide_stream_ida); in pci_ide_destroy()