Deleted Added
full compact
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 ---