STRUCT IPA(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ¦‹ struct ipa(9) β€” the Kernel API Manual glow-up πŸ¦‹

okay so bestie, welcome to struct ipa(9) β€” literally the main-character struct of the IPA subsystem, and yes, it's giving "everything you ever needed to know about an IPA instance, in one extremely long list of fields." no cap, this thing is long, but we're gonna get through it together πŸ’–


✨ NAME ✨

struct ipa β€” IPA information πŸŽ€ like, that's it, that's the whole vibe: it's the struct that holds the IPA info.


✨ SYNOPSIS ✨

here it is in all its glory, bestie β€” every field, exactly as written, do not touch:

struct ipa {
    struct gsi gsi;
    enum ipa_version version;
    struct device *dev;
    struct completion completion;
    struct notifier_block nb;
    void *notifier;
    struct ipa_smp2p *smp2p;
    struct ipa_power *power;
    dma_addr_t table_addr;
    __le64 *table_virt;
    u32 route_count;
    u32 modem_route_count;
    u32 filter_count;
    struct ipa_interrupt *interrupt;
    bool uc_powered;
    bool uc_loaded;
    void __iomem *reg_virt;
    const struct regs *regs;
    dma_addr_t mem_addr;
    void *mem_virt;
    u32 mem_offset;
    u32 mem_size;
    u32 mem_count;
    const struct ipa_mem *mem;
    unsigned long imem_iova;
    size_t imem_size;
    unsigned long smem_iova;
    size_t smem_size;
    dma_addr_t zero_addr;
    void *zero_virt;
    size_t zero_size;
    u32 endpoint_count;
    u32 available_count;
    unsigned long *defined;
    unsigned long *available;
    u64 filtered;
    unsigned long *set_up;
    unsigned long *enabled;
    u32 modem_tx_count;
    struct ipa_endpoint endpoint[IPA_ENDPOINT_MAX];
    struct ipa_endpoint *channel_map[GSI_CHANNEL_COUNT_MAX];
    struct ipa_endpoint *name_map[IPA_ENDPOINT_COUNT];
    bool setup_complete;
    atomic_t modem_state;
    struct net_device *modem_netdev;
    struct ipa_qmi qmi;
 };

✨ Members ✨

okay, field-by-field tour, no skipping, we're doing ALL of them 🫢

🌸 Core bits

  • gsi β€” the Embedded GSI structure, tucked right in there πŸͺΊ
  • version β€” the IPA hardware version, iykyk
  • dev β€” the IPA device pointer
  • completion β€” used to signal pipeline clear transfer complete ✨ (say that five times fast)
  • nb β€” notifier block used for remoteproc SSR
  • notifier β€” the remoteproc SSR notifier
  • smp2p β€” SMP2P information
  • power β€” IPA power information ⚑
  • interrupt β€” IPA Interrupt information

πŸŽ€ Tables & counts

  • table_addr β€” DMA address of filter/route table content
  • table_virt β€” virtual address of filter/route table content
  • route_count β€” total number of entries in a routing table
  • modem_route_count β€” number of modem entries in a routing table
  • filter_count β€” maximum number of entries in a filter table

🧚 Microcontroller vibes

  • uc_powered β€” true if power is active by proxy for microcontroller
  • uc_loaded β€” true after microcontroller has reported it's ready πŸ‘‘

πŸ’œ Registers

  • reg_virt β€” virtual address used for IPA register access
  • regs β€” IPA register definitions

πŸ“ IPA-local memory (the whole memory saga)

  • mem_addr β€” DMA address of IPA-local memory space
  • mem_virt β€” virtual address of IPA-local memory space
  • mem_offset β€” offset from mem_virt used for access to IPA memory
  • mem_size β€” total size (bytes) of memory at mem_virt
  • mem_count β€” number of entries in the mem array
  • mem β€” array of IPA-local memory region descriptors

🌈 IMEM & SMEM

  • imem_iova β€” I/O virtual address of IPA region in IMEM
  • imem_size β€” size of IMEM region
  • smem_iova β€” I/O virtual address of IPA region in SMEM
  • smem_size β€” size of SMEM region

⭐ The zero-filled memory trio (say hi to the zeros)

  • zero_addr β€” DMA address of preallocated zero-filled memory
  • zero_virt β€” virtual address of preallocated zero-filled memory
  • zero_size β€” size (bytes) of preallocated zero-filled memory

πŸ¦‹ Endpoint bitmap era

  • endpoint_count β€” number of defined bits in most bitmaps below
  • available_count β€” number of defined bits in the available bitmap
  • defined β€” bitmap of endpoints defined in config data
  • available β€” bitmap of endpoints supported by hardware
  • filtered β€” bitmap of endpoints that support filtering
  • set_up β€” bitmap of endpoints that are set up for use
  • enabled β€” bitmap of currently enabled endpoints
  • modem_tx_count β€” number of defined modem TX endoints (yes, "endoints" β€” that's literally how it's spelled here, and honestly? iconic πŸ’…)

πŸ”₯ Endpoint data & maps

  • endpoint β€” array of endpoint information
  • channel_map β€” mapping of GSI channel to IPA endpoint
  • name_map β€” mapping of IPA endpoint name to IPA endpoint

πŸŽ€ State & modem stuff

  • setup_complete β€” flag indicating whether setup stage has completed
  • modem_state β€” state of modem (stopped, running)
  • modem_netdev β€” network device structure used for modem
  • qmi β€” QMI information

✨ SEE ALSO ✨


bestie reminder: this is a kernel struct in a manual page, so if you're here you're already doing great πŸ’– go read ipa_setup(9) next, it's literally the natural sequel ✨

and that's the whole page, fr fr 🫢 this little love letter lives in ./drivers/net/ipa and it's dated October 2026 β€” go off, you absolute kernel legend πŸ‘‘πŸ’…

πŸ“¦ where this page comes from