Home | History | Annotate | Download | only in linux

Lines Matching refs:pdev

50 pci_dev_dev(struct pci_dev *pdev)
53 return pdev->pd_dev;
57 pci_set_drvdata(struct pci_dev *pdev, void *drvdata)
59 pdev->pd_drvdata = drvdata;
63 pci_get_drvdata(struct pci_dev *pdev)
65 return pdev->pd_drvdata;
69 pci_name(struct pci_dev *pdev)
73 return device_xname(pci_dev_dev(pdev));
145 linux_pci_dev_init(struct pci_dev *pdev, device_t dev, device_t parent,
152 memset(pdev, 0, sizeof(*pdev)); /* paranoia */
154 pdev->pd_pa = *pa;
155 pdev->pd_kludges = kludges;
156 pdev->pd_rom_vaddr = NULL;
157 pdev->pd_dev = dev;
160 pdev->pd_ad = acpi_pcidev_find(seg, pa->pa_bus,
163 pdev->pd_ad = NULL;
165 pdev->pd_saved_state = NULL;
166 pdev->pd_intr_handles = NULL;
167 pdev->pd_drvdata = NULL;
168 pdev->bus = kmem_zalloc(sizeof(*pdev->bus), KM_NOSLEEP);
169 pdev->bus->pb_pc = pa->pa_pc;
170 pdev->bus->pb_dev = parent;
171 pdev->bus->number = pa->pa_bus;
177 if (pci_is_pcie(pdev)) {
178 pdev->bus->max_bus_speed = pcie_get_speed_cap(pdev);
181 pdev->bus->max_bus_speed = PCI_SPEED_UNKNOWN;
183 pdev->bus->self = alloc_fake_parent_device(parent, pa);
184 pdev->devfn = PCI_DEVFN(pa->pa_device, pa->pa_function);
185 pdev->vendor = PCI_VENDOR(pa->pa_id);
186 pdev->device = PCI_PRODUCT(pa->pa_id);
187 pdev->subsystem_vendor = PCI_SUBSYS_VENDOR(subsystem_id);
188 pdev->subsystem_device = PCI_SUBSYS_ID(subsystem_id);
189 pdev->revision = PCI_REVISION(pa->pa_class);
190 pdev->class = __SHIFTOUT(pa->pa_class, 0xffffff00UL); /* ? */
192 CTASSERT(__arraycount(pdev->pd_resources) == PCI_NUM_RESOURCES);
196 pdev->pd_resources[i].type = pci_mapreg_type(pa->pa_pc,
199 pdev->pd_resources[i].type,
200 &pdev->pd_resources[i].addr,
201 &pdev->pd_resources[i].size,
202 &pdev->pd_resources[i].flags)) {
203 pdev->pd_resources[i].addr = 0;
204 pdev->pd_resources[i].size = 0;
205 pdev->pd_resources[i].flags = 0;
207 pdev->pd_resources[i].kva = NULL;
208 pdev->pd_resources[i].mapped = false;
213 pci_find_capability(struct pci_dev *pdev, int cap)
216 return pci_get_capability(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag, cap,
221 pci_read_config_dword(struct pci_dev *pdev, int reg, uint32_t *valuep)
225 *valuep = pci_conf_read(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag, reg);
230 pci_read_config_word(struct pci_dev *pdev, int reg, uint16_t *valuep)
234 *valuep = pci_conf_read(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag,
240 pci_read_config_byte(struct pci_dev *pdev, int reg, uint8_t *valuep)
243 *valuep = pci_conf_read(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag,
249 pci_write_config_dword(struct pci_dev *pdev, int reg, uint32_t value)
253 pci_conf_write(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag, reg, value);
322 pci_write_config_word(struct pci_dev *pdev, int reg, uint16_t value)
326 pci_rmw_config(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag, reg, 2, value);
331 pci_write_config_byte(struct pci_dev *pdev, int reg, uint8_t value)
334 pci_rmw_config(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag, reg, 1, value);
362 pci_enable_msi(struct pci_dev *pdev)
364 const struct pci_attach_args *const pa = &pdev->pd_pa;
366 if (pci_msi_alloc_exact(pa, &pdev->pd_intr_handles, 1))
369 pdev->msi_enabled = 1;
374 pci_disable_msi(struct pci_dev *pdev __unused)
376 const struct pci_attach_args *const pa = &pdev->pd_pa;
378 if (pdev->pd_intr_handles != NULL) {
379 pci_intr_release(pa->pa_pc, pdev->pd_intr_handles, 1);
380 pdev->pd_intr_handles = NULL;
382 pdev->msi_enabled = 0;
386 pci_set_master(struct pci_dev *pdev)
390 csr = pci_conf_read(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag,
393 pci_conf_write(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag,
398 pci_clear_master(struct pci_dev *pdev)
402 csr = pci_conf_read(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag,
405 pci_conf_write(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag,
410 pcie_capability_read_dword(struct pci_dev *pdev, int reg, uint32_t *valuep)
412 pci_chipset_tag_t pc = pdev->pd_pa.pa_pc;
413 pcitag_t tag = pdev->pd_pa.pa_tag;
428 pcie_capability_read_word(struct pci_dev *pdev, int reg, uint16_t *valuep)
430 pci_chipset_tag_t pc = pdev->pd_pa.pa_pc;
431 pcitag_t tag = pdev->pd_pa.pa_tag;
446 pcie_capability_write_dword(struct pci_dev *pdev, int reg, uint32_t value)
448 pci_chipset_tag_t pc = pdev->pd_pa.pa_pc;
449 pcitag_t tag = pdev->pd_pa.pa_tag;
462 pcie_capability_write_word(struct pci_dev *pdev, int reg, uint16_t value)
464 pci_chipset_tag_t pc = pdev->pd_pa.pa_pc;
465 pcitag_t tag = pdev->pd_pa.pa_tag;
488 pcie_get_readrq(struct pci_dev *pdev)
490 pci_chipset_tag_t pc = pdev->pd_pa.pa_pc;
491 pcitag_t tag = pdev->pd_pa.pa_tag;
507 pcie_set_readrq(struct pci_dev *pdev, int val)
509 pci_chipset_tag_t pc = pdev->pd_pa.pa_pc;
510 pcitag_t tag = pdev->pd_pa.pa_tag;
547 struct pci_dev *pdev)
549 const struct pci_attach_args *const pa = &pdev->pd_pa;
605 struct pci_dev *const pdev = kmem_zalloc(sizeof(*pdev), KM_SLEEP);
606 linux_pci_dev_init(pdev, NULL, NULL, &pa, NBPCI_KLUDGE_GET_MUMBLE);
608 return pdev;
612 pci_dev_put(struct pci_dev *pdev)
615 if (pdev == NULL)
618 KASSERT(ISSET(pdev->pd_kludges, NBPCI_KLUDGE_GET_MUMBLE));
619 kmem_free(pdev->bus, sizeof(*pdev->bus));
620 kmem_free(pdev, sizeof(*pdev));
657 struct pci_dev *pdev = NULL;
661 pdev = kmem_zalloc(sizeof(*pdev), KM_SLEEP);
662 linux_pci_dev_init(pdev, NULL, NULL, &pa, NBPCI_KLUDGE_GET_MUMBLE);
666 return pdev;
678 pci_unmap_rom(struct pci_dev *pdev, void __pci_rom_iomem *vaddr __unused)
682 KASSERT(ISSET(pdev->pd_kludges, NBPCI_KLUDGE_MAP_ROM));
683 KASSERT(vaddr == pdev->pd_rom_vaddr);
684 bus_space_unmap(pdev->pd_rom_bst, pdev->pd_rom_bsh, pdev->pd_rom_size);
685 pdev->pd_kludges &= ~NBPCI_KLUDGE_MAP_ROM;
686 pdev->pd_rom_vaddr = NULL;
691 pci_map_rom_md(struct pci_dev *pdev)
699 if (PCI_CLASS(pdev->pd_pa.pa_class) != PCI_CLASS_DISPLAY)
701 if (PCI_SUBCLASS(pdev->pd_pa.pa_class) != PCI_SUBCLASS_DISPLAY_VGA)
704 error = bus_space_map(pdev->pd_pa.pa_memt, rom_base, rom_size,
709 pdev->pd_rom_bst = pdev->pd_pa.pa_memt;
710 pdev->pd_rom_bsh = rom_bsh;
711 pdev->pd_rom_size = rom_size;
712 pdev->pd_kludges |= NBPCI_KLUDGE_MAP_ROM;
721 pci_map_rom(struct pci_dev *pdev, size_t *sizep)
724 KASSERT(!ISSET(pdev->pd_kludges, NBPCI_KLUDGE_MAP_ROM));
726 if (pci_mapreg_map(&pdev->pd_pa, PCI_MAPREG_ROM, PCI_MAPREG_TYPE_ROM,
728 &pdev->pd_rom_bst, &pdev->pd_rom_bsh, NULL, &pdev->pd_rom_size)
731 pdev->pd_kludges |= NBPCI_KLUDGE_MAP_ROM;
734 if (pci_find_rom(&pdev->pd_pa, pdev->pd_rom_bst, pdev->pd_rom_bsh,
735 pdev->pd_rom_size, PCI_ROM_CODE_TYPE_X86,
736 &pdev->pd_rom_found_bsh, &pdev->pd_rom_found_size)) {
737 pci_unmap_rom(pdev, NULL);
743 if (pci_map_rom_md(pdev) != 0)
747 if (pci_find_rom(&pdev->pd_pa, pdev->pd_rom_bst, pdev->pd_rom_bsh,
748 pdev->pd_rom_size, PCI_ROM_CODE_TYPE_X86,
749 &pdev->pd_rom_found_bsh, &pdev->pd_rom_found_size)) {
750 pci_unmap_rom(pdev, NULL);
755 KASSERT(pdev->pd_rom_found_size <= SIZE_T_MAX);
756 *sizep = pdev->pd_rom_found_size;
757 pdev->pd_rom_vaddr = bus_space_vaddr(pdev->pd_rom_bst,
758 pdev->pd_rom_found_bsh);
759 return pdev->pd_rom_vaddr;
766 pci_platform_rom(struct pci_dev *pdev __unused, size_t *sizep)
774 pci_enable_rom(struct pci_dev *pdev)
776 const pci_chipset_tag_t pc = pdev->pd_pa.pa_pc;
777 const pcitag_t tag = pdev->pd_pa.pa_tag;
793 pci_disable_rom(struct pci_dev *pdev)
795 const pci_chipset_tag_t pc = pdev->pd_pa.pa_pc;
796 const pcitag_t tag = pdev->pd_pa.pa_tag;
808 pci_resource_start(struct pci_dev *pdev, unsigned i)
813 return pdev->pd_resources[i].addr;
817 pci_resource_len(struct pci_dev *pdev, unsigned i)
822 return pdev->pd_resources[i].size;
826 pci_resource_end(struct pci_dev *pdev, unsigned i)
829 return pci_resource_start(pdev, i) + (pci_resource_len(pdev, i) - 1);
833 pci_resource_flags(struct pci_dev *pdev, unsigned i)
838 return pdev->pd_resources[i].flags;
842 pci_iomap(struct pci_dev *pdev, unsigned i, bus_size_t size)
847 KASSERT(pdev->pd_resources[i].kva == NULL);
849 if (PCI_MAPREG_TYPE(pdev->pd_resources[i].type) != PCI_MAPREG_TYPE_MEM)
851 if (pdev->pd_resources[i].size < size)
853 error = bus_space_map(pdev->pd_pa.pa_memt, pdev->pd_resources[i].addr,
854 size, BUS_SPACE_MAP_LINEAR | pdev->pd_resources[i].flags,
855 &pdev->pd_resources[i].bsh);
858 pdev->pd_resources[i].bst = pdev->pd_pa.pa_memt;
859 pdev->pd_resources[i].kva = bus_space_vaddr(pdev->pd_resources[i].bst,
860 pdev->pd_resources[i].bsh);
861 pdev->pd_resources[i].mapped = true;
863 return pdev->pd_resources[i].kva;
867 pci_iounmap(struct pci_dev *pdev, void __pci_iomem *kva)
871 CTASSERT(__arraycount(pdev->pd_resources) == PCI_NUM_RESOURCES);
873 if (pdev->pd_resources[i].kva == kva)
878 pdev->pd_resources[i].kva = NULL;
879 bus_space_unmap(pdev->pd_resources[i].bst, pdev->pd_resources[i].bsh,
880 pdev->pd_resources[i].size);
884 pci_save_state(struct pci_dev *pdev)
887 KASSERT(pdev->pd_saved_state == NULL);
888 pdev->pd_saved_state = kmem_alloc(sizeof(*pdev->pd_saved_state),
890 pci_conf_capture(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag,
891 pdev->pd_saved_state);
895 pci_restore_state(struct pci_dev *pdev)
898 KASSERT(pdev->pd_saved_state != NULL);
899 pci_conf_restore(pdev->pd_pa.pa_pc, pdev->pd_pa.pa_tag,
900 pdev->pd_saved_state);
901 kmem_free(pdev->pd_saved_state, sizeof(*pdev->pd_saved_state));
902 pdev->pd_saved_state = NULL;
906 pci_is_pcie(struct pci_dev *pdev)
909 return (pci_find_capability(pdev, PCI_CAP_PCIEXPRESS) != 0);
913 pci_dma_supported(struct pci_dev *pdev, uintmax_t mask)
918 return pci_dma64_available(&pdev->pd_pa);
924 pci_is_thunderbolt_attached(struct pci_dev *pdev)
954 linux_pci_enable_device(struct pci_dev *pdev)
956 const struct pci_attach_args *pa = &pdev->pd_pa;
960 if (pdev->pd_enablecnt++)
967 pdev->pd_enablecnt++;
977 linux_pci_disable_device(struct pci_dev *pdev)
979 const struct pci_attach_args *pa = &pdev->pd_pa;
983 if (--pdev->pd_enablecnt)
995 linux_pci_dev_destroy(struct pci_dev *pdev)
999 if (pdev->bus->self != NULL) {
1000 kmem_free(pdev->bus->self, sizeof(*pdev->bus->self));
1002 if (pdev->bus != NULL) {
1003 kmem_free(pdev->bus, sizeof(*pdev->bus));
1004 pdev->bus = NULL;
1006 if (ISSET(pdev->pd_kludges, NBPCI_KLUDGE_MAP_ROM)) {
1007 pci_unmap_rom(pdev, pdev->pd_rom_vaddr);
1008 pdev->pd_rom_vaddr = 0;
1010 for (i = 0; i < __arraycount(pdev->pd_resources); i++) {
1011 if (!pdev->pd_resources[i].mapped)
1013 bus_space_unmap(pdev->pd_resources[i].bst,
1014 pdev->pd_resources[i].bsh, pdev->pd_resources[i].size);
1018 KASSERT(pdev->pd_saved_state == NULL);
1019 KASSERT(pdev->pd_intr_handles == NULL);