STRUCT IPROC_MSI(9)
β¨ NAME β¨
okay so bestie, welcome to the struct iproc_msi(9) page from the Kernel API Manual β¨ β it's literally iProc event queue based MSI, and no cap, that's the whole vibe. π
π SYNOPSIS π
Here's the struct exactly as it is, because we do not mess with code, periodt:
struct iproc_msi {
struct iproc_pcie *pcie;
const u16 (*reg_offsets)[IPROC_MSI_REG_SIZE];
struct iproc_msi_grp *grps;
int nr_irqs;
int nr_cpus;
bool has_inten_reg;
unsigned long *bitmap;
struct mutex bitmap_lock;
unsigned int nr_msi_vecs;
struct irq_domain *inner_domain;
unsigned int nr_eq_region;
unsigned int nr_msi_region;
void *eq_cpu;
dma_addr_t eq_dma;
phys_addr_t msi_addr;
};
π§ Members π§
okay bestie, member-by-member, let's get into it:
pcieβ pointer to iProc PCIe data. It's giving "the PCIe info lives here" π«Ά.reg_offsetsβ MSI register offsets, fr fr. The type isconst u16 (*reg_offsets)[IPROC_MSI_REG_SIZE], so that's the exact shape π .grpsβ MSI groups. The group chat of MSI groups, lowkey.nr_irqsβ number of total interrupts connected to GIC. That's the count, no cap.nr_cpusβ number of toal CPUs β yes, "toal", we're keeping the source's spelling and moving on π.has_inten_regβ indicates the MSI interrupt enable register needs to be set explicitly (required for some legacy platforms). So yes, some legacy platforms need that extra explicit set, bestie π.bitmapβ MSI vector bitmap. The map of vectors, literally.bitmap_lockβ lock to protect access to the MSI bitmap. Gotta keep it safe, periodt.nr_msi_vecsβ total number of MSI vectors. The whole vector count, iykyk.inner_domainβ inner IRQ domain. That's the inner domain, bestie.nr_eq_regionβ required number of 4K aligned memory region for MSI event queues. Yes, "region" singular, we're keeping it π.nr_msi_regionβ required number of 4K aligned address region for MSI posted writes. Posted writes, iconic.eq_cpuβ pointer to allocated memory region for MSI event queues. It points at the allocated memory region, fr fr.eq_dmaβ DMA address of MSI event queues. That's the DMA address, exactly.msi_addrβ MSI address. That's the address, periodt.
πΈ Description πΈ
okay so the vibe check here is important: this struct is only meant to be used on platforms without MSI support integrated into the GIC. Like, if your platform has MSI support integrated into the GIC, this is not the main character for you π. No extra lore, that's the whole description.
π¦ SEE ALSO π¦
Kernel file ./drivers/pci/controller/pcie-iproc-msi.c and struct iproc_msi_grp(9) β go read those too bestie, iykyk π¦β¨.
Cute sign-off: source/version is ./drivers/pci/controller, date is October 2026 β bye bestie, slay your MSIs ππβ¨
π¦ 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