linux/drivers/pci/controller/mobiveil/pcie-mobiveil-host.c

// SPDX-License-Identifier: GPL-2.0
/*
 * PCIe host controller driver for Mobiveil PCIe Host controller
 *
 * Copyright (c) 2018 Mobiveil Inc.
 * Copyright 2019-2020 NXP
 *
 * Author: Subrahmanya Lingappa <[email protected]>
 *	   Hou Zhiqiang <[email protected]>
 */

#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqchip/chained_irq.h>
#include <linux/irqdomain.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/msi.h>
#include <linux/of_pci.h>
#include <linux/pci.h>
#include <linux/platform_device.h>
#include <linux/slab.h>

#include "pcie-mobiveil.h"

static bool mobiveil_pcie_valid_device(struct pci_bus *bus, unsigned int devfn)
{}

/*
 * mobiveil_pcie_map_bus - routine to get the configuration base of either
 * root port or endpoint
 */
static void __iomem *mobiveil_pcie_map_bus(struct pci_bus *bus,
					   unsigned int devfn, int where)
{}

static struct pci_ops mobiveil_pcie_ops =;

static void mobiveil_pcie_isr(struct irq_desc *desc)
{}

static int mobiveil_pcie_parse_dt(struct mobiveil_pcie *pcie)
{}

static void mobiveil_pcie_enable_msi(struct mobiveil_pcie *pcie)
{}

int mobiveil_host_init(struct mobiveil_pcie *pcie, bool reinit)
{}

static void mobiveil_mask_intx_irq(struct irq_data *data)
{}

static void mobiveil_unmask_intx_irq(struct irq_data *data)
{}

static struct irq_chip intx_irq_chip =;

/* routine to setup the INTx related data */
static int mobiveil_pcie_intx_map(struct irq_domain *domain, unsigned int irq,
				  irq_hw_number_t hwirq)
{}

/* INTx domain operations structure */
static const struct irq_domain_ops intx_domain_ops =;

static struct irq_chip mobiveil_msi_irq_chip =;

static struct msi_domain_info mobiveil_msi_domain_info =;

static void mobiveil_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
{}

static int mobiveil_msi_set_affinity(struct irq_data *irq_data,
				     const struct cpumask *mask, bool force)
{}

static struct irq_chip mobiveil_msi_bottom_irq_chip =;

static int mobiveil_irq_msi_domain_alloc(struct irq_domain *domain,
					 unsigned int virq,
					 unsigned int nr_irqs, void *args)
{}

static void mobiveil_irq_msi_domain_free(struct irq_domain *domain,
					 unsigned int virq,
					 unsigned int nr_irqs)
{}
static const struct irq_domain_ops msi_domain_ops =;

static int mobiveil_allocate_msi_domains(struct mobiveil_pcie *pcie)
{}

static int mobiveil_pcie_init_irq_domain(struct mobiveil_pcie *pcie)
{}

static int mobiveil_pcie_integrated_interrupt_init(struct mobiveil_pcie *pcie)
{}

static int mobiveil_pcie_interrupt_init(struct mobiveil_pcie *pcie)
{}

static bool mobiveil_pcie_is_bridge(struct mobiveil_pcie *pcie)
{}

int mobiveil_pcie_host_probe(struct mobiveil_pcie *pcie)
{}