FreeBSD kernel amd64 PCI device code
pci_host_generic_fdt.c File Reference
#include <sys/cdefs.h>
#include "opt_platform.h"
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/bus.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/module.h>
#include <sys/rman.h>
#include <dev/ofw/openfirm.h>
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
#include <dev/ofw/ofw_pci.h>
#include <dev/pci/pcivar.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcib_private.h>
#include <dev/pci/pci_host_generic.h>
#include <dev/pci/pci_host_generic_fdt.h>
#include <machine/intr.h>
#include "pcib_if.h"
Include dependency graph for pci_host_generic_fdt.c:

Go to the source code of this file.

Data Structures

struct  pci_ofw_devinfo
 

Macros

#define SPACE_CODE_SHIFT   24
 
#define SPACE_CODE_MASK   0x3
 
#define SPACE_CODE_IO_SPACE   0x1
 
#define PROPS_CELL_SIZE   1
 
#define PCI_ADDR_CELL_SIZE   2
 

Functions

 __FBSDID ("$FreeBSD$")
 
static int generic_pcie_fdt_probe (device_t dev)
 
static int parse_pci_mem_ranges (device_t, struct generic_pcie_core_softc *)
 
static int generic_pcie_ofw_bus_attach (device_t)
 
static const struct ofw_bus_devinfo * generic_pcie_ofw_get_devinfo (device_t, device_t)
 
int pci_host_generic_setup_fdt (device_t dev)
 
int pci_host_generic_attach (device_t dev)
 
static int generic_pcie_fdt_route_interrupt (device_t bus, device_t dev, int pin)
 
static int generic_pcie_fdt_alloc_msi (device_t pci, device_t child, int count, int maxcount, int *irqs)
 
static int generic_pcie_fdt_release_msi (device_t pci, device_t child, int count, int *irqs)
 
static int generic_pcie_fdt_map_msi (device_t pci, device_t child, int irq, uint64_t *addr, uint32_t *data)
 
static int generic_pcie_fdt_alloc_msix (device_t pci, device_t child, int *irq)
 
static int generic_pcie_fdt_release_msix (device_t pci, device_t child, int irq)
 
int generic_pcie_get_id (device_t pci, device_t child, enum pci_id_type type, uintptr_t *id)
 
 DEFINE_CLASS_1 (pcib, generic_pcie_fdt_driver, generic_pcie_fdt_methods, sizeof(struct generic_pcie_fdt_softc), generic_pcie_core_driver)
 
 DRIVER_MODULE (pcib, simplebus, generic_pcie_fdt_driver, generic_pcie_fdt_devclass, 0, 0)
 
 DRIVER_MODULE (pcib, ofwbus, generic_pcie_fdt_driver, generic_pcie_fdt_devclass, 0, 0)
 

Variables

static device_method_t generic_pcie_fdt_methods []
 
static devclass_t generic_pcie_fdt_devclass
 

Macro Definition Documentation

◆ PCI_ADDR_CELL_SIZE

#define PCI_ADDR_CELL_SIZE   2

Definition at line 72 of file pci_host_generic_fdt.c.

◆ PROPS_CELL_SIZE

#define PROPS_CELL_SIZE   1

Definition at line 71 of file pci_host_generic_fdt.c.

◆ SPACE_CODE_IO_SPACE

#define SPACE_CODE_IO_SPACE   0x1

Definition at line 70 of file pci_host_generic_fdt.c.

◆ SPACE_CODE_MASK

#define SPACE_CODE_MASK   0x3

Definition at line 69 of file pci_host_generic_fdt.c.

◆ SPACE_CODE_SHIFT

#define SPACE_CODE_SHIFT   24

Definition at line 68 of file pci_host_generic_fdt.c.

Function Documentation

◆ __FBSDID()

__FBSDID ( "$FreeBSD$"  )

◆ DEFINE_CLASS_1()

DEFINE_CLASS_1 ( pcib  ,
generic_pcie_fdt_driver  ,
generic_pcie_fdt_methods  ,
sizeof(struct generic_pcie_fdt_softc ,
generic_pcie_core_driver   
)

◆ DRIVER_MODULE() [1/2]

DRIVER_MODULE ( pcib  ,
ofwbus  ,
generic_pcie_fdt_driver  ,
generic_pcie_fdt_devclass  ,
,
 
)

◆ DRIVER_MODULE() [2/2]

DRIVER_MODULE ( pcib  ,
simplebus  ,
generic_pcie_fdt_driver  ,
generic_pcie_fdt_devclass  ,
,
 
)

◆ generic_pcie_fdt_alloc_msi()

static int generic_pcie_fdt_alloc_msi ( device_t  pci,
device_t  child,
int  count,
int  maxcount,
int *  irqs 
)
static

Definition at line 292 of file pci_host_generic_fdt.c.

References child, count, irqs, maxcount, and pci.

◆ generic_pcie_fdt_alloc_msix()

static int generic_pcie_fdt_alloc_msix ( device_t  pci,
device_t  child,
int *  irq 
)
static

Definition at line 346 of file pci_host_generic_fdt.c.

References child, irq, and pci.

◆ generic_pcie_fdt_map_msi()

static int generic_pcie_fdt_map_msi ( device_t  pci,
device_t  child,
int  irq,
uint64_t *  addr,
uint32_t *  data 
)
static

Definition at line 328 of file pci_host_generic_fdt.c.

References addr, child, data, irq, and pci.

◆ generic_pcie_fdt_probe()

static int generic_pcie_fdt_probe ( device_t  dev)
static

Definition at line 91 of file pci_host_generic_fdt.c.

References dev.

◆ generic_pcie_fdt_release_msi()

static int generic_pcie_fdt_release_msi ( device_t  pci,
device_t  child,
int  count,
int *  irqs 
)
static

Definition at line 311 of file pci_host_generic_fdt.c.

References child, count, irqs, and pci.

◆ generic_pcie_fdt_release_msix()

static int generic_pcie_fdt_release_msix ( device_t  pci,
device_t  child,
int  irq 
)
static

Definition at line 363 of file pci_host_generic_fdt.c.

References child, irq, and pci.

◆ generic_pcie_fdt_route_interrupt()

static int generic_pcie_fdt_route_interrupt ( device_t  bus,
device_t  dev,
int  pin 
)
static

Definition at line 262 of file pci_host_generic_fdt.c.

References bus, dev, generic_pcie_fdt_softc::pci_iinfo, pin, and reg.

◆ generic_pcie_get_id()

int generic_pcie_get_id ( device_t  pci,
device_t  child,
enum pci_id_type  type,
uintptr_t *  id 
)

Definition at line 380 of file pci_host_generic_fdt.c.

References child, pci, PCI_ID_MSI, pcib_get_id, rid, and type.

◆ generic_pcie_ofw_bus_attach()

static int generic_pcie_ofw_bus_attach ( device_t  dev)
static

Definition at line 424 of file pci_host_generic_fdt.c.

References dev, and reg.

Referenced by pci_host_generic_setup_fdt().

Here is the caller graph for this function:

◆ generic_pcie_ofw_get_devinfo()

static const struct ofw_bus_devinfo * generic_pcie_ofw_get_devinfo ( device_t  bus,
device_t  child 
)
static

Definition at line 403 of file pci_host_generic_fdt.c.

References bus, child, func, and slot.

◆ parse_pci_mem_ranges()

static int parse_pci_mem_ranges ( device_t  dev,
struct generic_pcie_core_softc sc 
)
static

◆ pci_host_generic_attach()

int pci_host_generic_attach ( device_t  dev)

Definition at line 167 of file pci_host_generic_fdt.c.

References dev, and pci_host_generic_setup_fdt().

Here is the call graph for this function:

◆ pci_host_generic_setup_fdt()

Variable Documentation

◆ generic_pcie_fdt_devclass

devclass_t generic_pcie_fdt_devclass
static

Definition at line 487 of file pci_host_generic_fdt.c.

◆ generic_pcie_fdt_methods

device_method_t generic_pcie_fdt_methods[]
static
Initial value:
= {
DEVMETHOD(device_probe, generic_pcie_fdt_probe),
DEVMETHOD(device_attach, pci_host_generic_attach),
DEVMETHOD(bus_alloc_resource, pci_host_generic_core_alloc_resource),
DEVMETHOD(bus_release_resource, pci_host_generic_core_release_resource),
DEVMETHOD(ofw_bus_get_devinfo, generic_pcie_ofw_get_devinfo),
DEVMETHOD(ofw_bus_get_compat, ofw_bus_gen_get_compat),
DEVMETHOD(ofw_bus_get_model, ofw_bus_gen_get_model),
DEVMETHOD(ofw_bus_get_name, ofw_bus_gen_get_name),
DEVMETHOD(ofw_bus_get_node, ofw_bus_gen_get_node),
DEVMETHOD(ofw_bus_get_type, ofw_bus_gen_get_type),
DEVMETHOD_END
}
int pci_host_generic_core_release_resource(device_t dev, device_t child, int type, int rid, struct resource *res)
struct resource * pci_host_generic_core_alloc_resource(device_t dev, device_t child, int type, int *rid, rman_res_t start, rman_res_t end, rman_res_t count, u_int flags)
static int generic_pcie_fdt_alloc_msi(device_t pci, device_t child, int count, int maxcount, int *irqs)
static int generic_pcie_fdt_alloc_msix(device_t pci, device_t child, int *irq)
static int generic_pcie_fdt_release_msix(device_t pci, device_t child, int irq)
static const struct ofw_bus_devinfo * generic_pcie_ofw_get_devinfo(device_t, device_t)
static int generic_pcie_fdt_probe(device_t dev)
static int generic_pcie_fdt_route_interrupt(device_t bus, device_t dev, int pin)
int pci_host_generic_attach(device_t dev)
static int generic_pcie_fdt_map_msi(device_t pci, device_t child, int irq, uint64_t *addr, uint32_t *data)
static int generic_pcie_fdt_release_msi(device_t pci, device_t child, int count, int *irqs)
int generic_pcie_get_id(device_t pci, device_t child, enum pci_id_type type, uintptr_t *id)
int pcib_alloc_msix(device_t pcib, device_t dev, int *irq)
Definition: pci_pci.c:2797
int pcib_release_msix(device_t pcib, device_t dev, int irq)
Definition: pci_pci.c:2810
int pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *irqs)
Definition: pci_pci.c:2773
int pcib_release_msi(device_t pcib, device_t dev, int count, int *irqs)
Definition: pci_pci.c:2787
int pcib_route_interrupt(device_t pcib, device_t dev, int pin)
Definition: pci_pci.c:2739
int pcib_request_feature_allow(device_t pcib, device_t dev, enum pci_feature feature)
Definition: pci_pci.c:2944
int pcib_map_msi(device_t pcib, device_t dev, int irq, uint64_t *addr, uint32_t *data)
Definition: pci_pci.c:2820
int pcib_request_feature(device_t dev, enum pci_feature feature)
Definition: pci_pci.c:2963
DEFAULT pcib_get_id
Definition: pcib_if.m:187

Definition at line 458 of file pci_host_generic_fdt.c.