pci_epc_map_msi_irq(9)
okay bestie, welcome to the pci_epc_map_msi_irq(9) page from the Kernel API Manual β this is the one where we map a physical address to an MSI address and hand back the MSI data π
β¨ NAME β¨
pci_epc_map_msi_irq β Map physical address to MSI address and return MSI data, periodt π
πΈ SYNOPSIS πΈ
the signature is giving kernel-core realness, and it is exactly this:
int pci_epc_map_msi_irq (struct pci_epc *epc , u8 func_no , u8 vfunc_no
, phys_addr_t phys_addr , u8 interrupt_num , u32 entry_size , u32
*msi_data , u32 *msi_addr_offset );
π ARGUMENTS π
okay so here is the cast of characters, bestie β every single one matters:
epcβ the EPC device which has the MSI capability. main character energy, fr fr.func_noβ the physical endpoint function number in the EPC device.vfunc_noβ the virtual endpoint function number in the physical function.phys_addrβ the physical address of the outbound region.interrupt_numβ the MSI interrupt number with range(1-N).entry_sizeβ Size of Outbound address region for each interrupt.msi_dataβ the data that should be written in order to raise MSI interrupt with interrupt number as'interrupt num'.msi_addr_offsetβ Offset of MSI address from the aligned outbound address to which the MSI address is mapped.
π¦ DESCRIPTION π¦
Invoke this to map a physical address to an MSI address and return the MSI data β it is giving bridge-between-worlds β¨. The physical address should be an address in the outbound region, lowkey do not skip that part. This is required to implement the doorbell functionality of NTB, wherein the EPC on either side of the interface (primary and secondary) can directly write to the physical address (in the outbound region) of the other interface to ring the doorbell. iconic NTB doorbell behavior, no cap π
π SEE ALSO π
Kernel file ./drivers/pci/endpoint/pci-epc-core.c β the source file, iykyk. And here is the whole bestie squad of cross-references, all present and accounted for:
pci_epc_put(9)pci_epc_get(9)pci_epc_get_first_free_bar(9)pci_epc_get_next_free_bar(9)pci_epc_get_features(9)pci_epc_get_aux_resources_count(9)pci_epc_get_aux_resources(9)pci_epc_stop(9)pci_epc_start(9)pci_epc_raise_irq(9)pci_epc_get_msi(9)pci_epc_set_msi(9)pci_epc_get_msix(9)pci_epc_set_msix(9)pci_epc_unmap_addr(9)pci_epc_map_addr(9)pci_epc_mem_map(9)pci_epc_mem_unmap(9)pci_epc_clear_bar(9)pci_epc_set_bar(9)pci_epc_bar_size_to_rebar_cap(9)pci_epc_write_header(9)pci_epc_add_epf(9)pci_epc_remove_epf(9)pci_epc_linkup(9)pci_epc_linkdown(9)pci_epc_init_notify(9)pci_epc_notify_pending_init(9)pci_epc_deinit_notify(9)pci_epc_bus_master_enable_notify(9)pci_epc_destroy(9)__pci_epc_create(9)__devm_pci_epc_create(9)
mwah π that is the whole page, bestie. Source/version vibe: ./drivers/pci/endpoint; date on deck: October 2026; and yes, it is still the pci_epc_map_msi_irq(9) page. bye π«Ά
π¦ 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