STRUCT NBPF_CHANNEL(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct nbpf_channel(9) β€” like, the whole kernel API manual, bestie

okay so this is the struct nbpf_channel(9) page from the Kernel API Manual (yes, section 9, we love a kernel-space moment ✨). it's all about one DMAC channel β€” a single channel of the DMA controller, broken down field by field so you know exactly what's vibing in there πŸŽ€


✨ NAME ✨

struct nbpf_channel β€” literally just one DMAC channel, that's the whole gig πŸ’«


πŸ¦‹ SYNOPSIS πŸ¦‹

struct nbpf_channel {
    struct dma_chan dma_chan;
    struct tasklet_struct tasklet;
    void __iomem *base;
    struct nbpf_device *nbpf;
    char name[16];
    int irq;
    dma_addr_t slave_src_addr;
    size_t slave_src_width;
    size_t slave_src_burst;
    dma_addr_t slave_dst_addr;
    size_t slave_dst_width;
    size_t slave_dst_burst;
    unsigned int terminal;
    u32 dmarq_cfg;
    unsigned long flags;
    spinlock_t lock;
    struct list_head free_links;
    struct list_head free;
    struct list_head queued;
    struct list_head active;
    struct list_head done;
    struct list_head desc_page;
    struct nbpf_desc *running;
    bool paused;
};

like, that's the whole struct, no cap πŸ‘‘


🌸 Members 🌸

okay now the main character energy part β€” every single member, one by one, let's go 🫢

  • dma_chan β€” the standard dmaengine channel object, the vanilla one everybody gets 🍦
  • tasklet β€” this channel's own little tasklet, it's the one that runs the callbacks ⚑
  • base β€” the register address base, where the registers live πŸ“
  • nbpf β€” the DMAC itself, hi bestie πŸ‘‹
  • name β€” the IRQ name 🏷️
  • irq β€” the IRQ number πŸ”’
  • slave_src_addr β€” source address for slave DMA πŸ“€
  • slave_src_width β€” source slave data size, in bytes πŸ“
  • slave_src_burst β€” maximum source slave burst size, in bytes πŸ’₯
  • slave_dst_addr β€” destination address for slave DMA πŸ“₯
  • slave_dst_width β€” destination slave data size, in bytes πŸ“
  • slave_dst_burst β€” maximum destination slave burst size, in bytes 🌊
  • terminal β€” the DMA terminal, assigned to this channel 🎯
  • dmarq_cfg β€” DMA request line configuration: high / low, edge / level, for NBPF_CHAN_CFG πŸŽ›οΈ
  • flags β€” configuration flags, straight from DT 🚩
  • lock β€” protects the descriptor lists πŸ”’ (do not skip this one, fr fr)
  • free_links β€” list of free link descriptors ⛓️
  • free β€” list of free descriptors πŸ†“
  • queued β€” list of queued descriptors πŸ“‹
  • active β€” list of descriptors scheduled for processing πŸƒβ€β™€οΈ
  • done β€” list of completed descriptors, waiting on post-processing βœ…
  • desc_page β€” list of additionally allocated descriptor pages, if there are any πŸ“„
  • running β€” the linked descriptor of the running transaction πŸ”₯
  • paused β€” are translations on this channel paused? πŸ€” (a bool, so it's a yes/no vibe)

πŸ‘‘ SEE ALSO πŸ‘‘

  • Kernel file ./drivers/dma/nbpfaxi.c and struct nbpf_desc(9) β€” go read those too, iykyk πŸ“š

heads up bestie: lock is there to protect the descriptor lists β€” that's the whole reason it exists, so don't be out here touching those lists without it πŸ’€

and that's a wrap on the struct nbpf_channel(9) page 🌈 β€” brought to you by the ./drivers/dma directory, dated October 2026, slaying in the Kernel API Manual forever πŸ’–πŸŽ€πŸ¦‹

πŸ“¦ where this page comes from