pci_host_generic.c (299658) | pci_host_generic.c (299928) |
---|---|
1/*- 2 * Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com> 3 * Copyright (c) 2014 The FreeBSD Foundation 4 * All rights reserved. 5 * 6 * This software was developed by Semihalf under 7 * the sponsorship of the FreeBSD Foundation. 8 * --- 17 unchanged lines hidden (view full) --- 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31/* Generic ECAM PCIe driver */ 32 33#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2015 Ruslan Bukin <br@bsdpad.com> 3 * Copyright (c) 2014 The FreeBSD Foundation 4 * All rights reserved. 5 * 6 * This software was developed by Semihalf under 7 * the sponsorship of the FreeBSD Foundation. 8 * --- 17 unchanged lines hidden (view full) --- 26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 28 * SUCH DAMAGE. 29 */ 30 31/* Generic ECAM PCIe driver */ 32 33#include <sys/cdefs.h> |
34__FBSDID("$FreeBSD: head/sys/dev/pci/pci_host_generic.c 299658 2016-05-13 11:18:27Z bz $"); | 34__FBSDID("$FreeBSD: head/sys/dev/pci/pci_host_generic.c 299928 2016-05-16 09:11:40Z andrew $"); |
35 36#include "opt_platform.h" 37 38#include <sys/param.h> 39#include <sys/systm.h> 40#include <sys/malloc.h> 41#include <sys/kernel.h> 42#include <sys/rman.h> 43#include <sys/module.h> 44#include <sys/bus.h> 45#include <sys/endian.h> 46#include <sys/cpuset.h> 47#include <sys/rwlock.h> 48 | 35 36#include "opt_platform.h" 37 38#include <sys/param.h> 39#include <sys/systm.h> 40#include <sys/malloc.h> 41#include <sys/kernel.h> 42#include <sys/rman.h> 43#include <sys/module.h> 44#include <sys/bus.h> 45#include <sys/endian.h> 46#include <sys/cpuset.h> 47#include <sys/rwlock.h> 48 |
49#if defined(INTRNG) 50#include <machine/intr.h> 51#endif 52 |
|
49#include <dev/ofw/openfirm.h> 50#include <dev/ofw/ofw_bus.h> 51#include <dev/ofw/ofw_bus_subr.h> 52#include <dev/ofw/ofw_pci.h> 53#include <dev/pci/pcivar.h> 54#include <dev/pci/pcireg.h> 55#include <dev/pci/pcib_private.h> 56#include <dev/pci/pci_host_generic.h> --- 96 unchanged lines hidden (view full) --- 153 154int 155pci_host_generic_attach(device_t dev) 156{ 157 struct generic_pcie_softc *sc; 158 uint64_t phys_base; 159 uint64_t pci_base; 160 uint64_t size; | 53#include <dev/ofw/openfirm.h> 54#include <dev/ofw/ofw_bus.h> 55#include <dev/ofw/ofw_bus_subr.h> 56#include <dev/ofw/ofw_pci.h> 57#include <dev/pci/pcivar.h> 58#include <dev/pci/pcireg.h> 59#include <dev/pci/pcib_private.h> 60#include <dev/pci/pci_host_generic.h> --- 96 unchanged lines hidden (view full) --- 157 158int 159pci_host_generic_attach(device_t dev) 160{ 161 struct generic_pcie_softc *sc; 162 uint64_t phys_base; 163 uint64_t pci_base; 164 uint64_t size; |
165 phandle_t node; |
|
161 int error; 162 int tuple; 163 int rid; 164 165 sc = device_get_softc(dev); 166 sc->dev = dev; 167 168 /* Retrieve 'ranges' property from FDT */ --- 53 unchanged lines hidden (view full) --- 222 if (error) { 223 device_printf(dev, "rman_manage_region() failed." 224 "error = %d\n", error); 225 rman_fini(&sc->mem_rman); 226 return (error); 227 } 228 } 229 | 166 int error; 167 int tuple; 168 int rid; 169 170 sc = device_get_softc(dev); 171 sc->dev = dev; 172 173 /* Retrieve 'ranges' property from FDT */ --- 53 unchanged lines hidden (view full) --- 227 if (error) { 228 device_printf(dev, "rman_manage_region() failed." 229 "error = %d\n", error); 230 rman_fini(&sc->mem_rman); 231 return (error); 232 } 233 } 234 |
230 ofw_bus_setup_iinfo(ofw_bus_get_node(dev), &sc->pci_iinfo, 231 sizeof(cell_t)); | 235 node = ofw_bus_get_node(dev); 236 ofw_bus_setup_iinfo(node, &sc->pci_iinfo, sizeof(cell_t)); |
232 | 237 |
238 /* Find the MSI interrupt handler */ 239 OF_searchencprop(node, "msi-parent", &sc->msi_parent, 240 sizeof(sc->msi_parent)); 241 |
|
233 device_add_child(dev, "pci", -1); 234 return (bus_generic_attach(dev)); 235} 236 237static int 238parse_pci_mem_ranges(struct generic_pcie_softc *sc) 239{ 240 pcell_t pci_addr_cells, parent_addr_cells; --- 415 unchanged lines hidden (view full) --- 656 657 return (res); 658} 659 660static int 661generic_pcie_alloc_msi(device_t pci, device_t child, int count, int maxcount, 662 int *irqs) 663{ | 242 device_add_child(dev, "pci", -1); 243 return (bus_generic_attach(dev)); 244} 245 246static int 247parse_pci_mem_ranges(struct generic_pcie_softc *sc) 248{ 249 pcell_t pci_addr_cells, parent_addr_cells; --- 415 unchanged lines hidden (view full) --- 665 666 return (res); 667} 668 669static int 670generic_pcie_alloc_msi(device_t pci, device_t child, int count, int maxcount, 671 int *irqs) 672{ |
673#if defined(INTRNG) 674 struct generic_pcie_softc *sc; |
|
664 | 675 |
665#if defined(__aarch64__) | 676 sc = device_get_softc(pci); 677 return (intr_alloc_msi(pci, child, sc->msi_parent, count, maxcount, 678 irqs)); 679#elif defined(__aarch64__) |
666 return (arm_alloc_msi(pci, child, count, maxcount, irqs)); 667#else 668 return (ENXIO); 669#endif 670} 671 672static int 673generic_pcie_release_msi(device_t pci, device_t child, int count, int *irqs) 674{ | 680 return (arm_alloc_msi(pci, child, count, maxcount, irqs)); 681#else 682 return (ENXIO); 683#endif 684} 685 686static int 687generic_pcie_release_msi(device_t pci, device_t child, int count, int *irqs) 688{ |
689#if defined(INTRNG) 690 struct generic_pcie_softc *sc; |
|
675 | 691 |
676#if defined(__aarch64__) | 692 sc = device_get_softc(pci); 693 return (intr_release_msi(pci, child, sc->msi_parent, count, irqs)); 694#elif defined(__aarch64__) |
677 return (arm_release_msi(pci, child, count, irqs)); 678#else 679 return (ENXIO); 680#endif 681} 682 683static int 684generic_pcie_map_msi(device_t pci, device_t child, int irq, uint64_t *addr, 685 uint32_t *data) 686{ | 695 return (arm_release_msi(pci, child, count, irqs)); 696#else 697 return (ENXIO); 698#endif 699} 700 701static int 702generic_pcie_map_msi(device_t pci, device_t child, int irq, uint64_t *addr, 703 uint32_t *data) 704{ |
705#if defined(INTRNG) 706 struct generic_pcie_softc *sc; |
|
687 | 707 |
688#if defined(__aarch64__) | 708 sc = device_get_softc(pci); 709 return (intr_map_msi(pci, child, sc->msi_parent, irq, addr, data)); 710#elif defined(__aarch64__) |
689 return (arm_map_msi(pci, child, irq, addr, data)); 690#else 691 return (ENXIO); 692#endif 693} 694 695static int 696generic_pcie_alloc_msix(device_t pci, device_t child, int *irq) 697{ | 711 return (arm_map_msi(pci, child, irq, addr, data)); 712#else 713 return (ENXIO); 714#endif 715} 716 717static int 718generic_pcie_alloc_msix(device_t pci, device_t child, int *irq) 719{ |
720#if defined(INTRNG) 721 struct generic_pcie_softc *sc; |
|
698 | 722 |
699#if defined(__aarch64__) | 723 sc = device_get_softc(pci); 724 return (intr_alloc_msix(pci, child, sc->msi_parent, irq)); 725#elif defined(__aarch64__) |
700 return (arm_alloc_msix(pci, child, irq)); 701#else 702 return (ENXIO); 703#endif 704} 705 706static int 707generic_pcie_release_msix(device_t pci, device_t child, int irq) 708{ | 726 return (arm_alloc_msix(pci, child, irq)); 727#else 728 return (ENXIO); 729#endif 730} 731 732static int 733generic_pcie_release_msix(device_t pci, device_t child, int irq) 734{ |
735#if defined(INTRNG) 736 struct generic_pcie_softc *sc; |
|
709 | 737 |
710#if defined(__aarch64__) | 738 sc = device_get_softc(pci); 739 return (intr_release_msix(pci, child, sc->msi_parent, irq)); 740#elif defined(__aarch64__) |
711 return (arm_release_msix(pci, child, irq)); 712#else 713 return (ENXIO); 714#endif 715} 716 717static device_method_t generic_pcie_methods[] = { 718 DEVMETHOD(device_probe, generic_pcie_probe), --- 156 unchanged lines hidden --- | 741 return (arm_release_msix(pci, child, irq)); 742#else 743 return (ENXIO); 744#endif 745} 746 747static device_method_t generic_pcie_methods[] = { 748 DEVMETHOD(device_probe, generic_pcie_probe), --- 156 unchanged lines hidden --- |