STRUCT CDNS_PCIE_EP(9)
π NAME π
okay so this is the struct cdns_pcie_ep(9) page from the Kernel API Manual, and itβs literally the private data for this PCIe endpoint controller driver. bestie, itβs the structβs main character arc: all the endpoint controllerβs private little details live here. π
β¨
β¨ SYNOPSIS β¨
no cap, hereβs the exact struct shape β do not lose a single field, okay?
struct cdns_pcie_ep {
struct cdns_pcie pcie;
u32 max_regions;
unsigned long ob_region_map;
phys_addr_t *ob_addr;
phys_addr_t irq_phys_addr;
void __iomem *irq_cpu_addr;
u64 irq_pci_addr;
u8 irq_pci_fn;
u8 irq_pending;
spinlock_t lock;
struct cdns_pcie_epf *epf;
unsigned int quirk_detect_quiet_flag:1;
unsigned int quirk_disable_flr:1;
};
π«Ά MEMBERS π«Ά
pcieβ the Cadence PCIe controller. iconic. thatβs the controller vibe right there. πmax_regionsβ maximum number of regions supported by hardware. yes, hardware says how many regions it can handle, and this is the limit. πob_region_mapβ bitmask of mapped outbound regions. lowkey a little map of which outbound regions are mapped. β¨ob_addrβ base addresses in the AXI bus where the outbound regions start. this is where they begin on the AXI bus, periodt. π¦irq_phys_addrβ base address on the AXI bus where the MSI/INTX IRQ dedicated outbound regions is mapped. yep, that exact thing. πΈirq_cpu_addrβ base address in the CPU space where a write access triggers the sending of a memory write (MSI) / normal message (INTX IRQ) TLP through the PCIe bus. the whole trigger-a-TLP situation. π₯irq_pci_addrβ used to save the current mapping of the MSI/INTX IRQ dedicated outbound region. saving the current mapping, not me forgetting it. πirq_pci_fnβ the latest PCI function that has updated the mapping of the MSI/INTX IRQ dedicated outbound region. the latest updater, iykyk. πirq_pendingβ bitmask of asserted INTX IRQs. bitmask, asserted, INTX IRQs β all of that. βlockβ spin lock to disable interrupts while modifying PCIe controller registers fields (RMW) accessible by both remote RC and EP to minimize time between read and write. dramatic? maybe. important? absolutely. πepfβ structure to hold info about endpoint function. itβs giving endpoint-function info holder energy. π§quirk_detect_quiet_flagβ LTSSM Detect Quiet min delay set as quirk. quirk flag, slay. πquirk_disable_flrβ Disable FLR (Function Level Reset) quirk flag. thatβs the FLR-disable quirk flag, bestie. π
π SEE ALSO π
want more lore? go peek at the kernel file ./drivers/pci/controller/cadence/pcie-cadence.h and also check out struct cdns_plat_pcie_of_data(9), struct cdns_pcie(9), struct cdns_pcie_rc(9), and struct cdns_pcie_epf(9). the whole cadence crew fr fr. π«Ά
mwah π cute little sign-off: this pageβs source/version situation is ./drivers/pci/controller/cadence, dated October 2026, and the manual page is struct cdns_pcie_ep(9). bye bestie, go read the struct! πβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms