STRUCT XILINX_DMA_CHAN(9)
π struct xilinx_dma_chan(9) π
okay bestie, welcome to the Kernel API Manual β¨ this one's all about struct xilinx_dma_chan and honestly? it's kind of a whole vibe. strap in π
πΈ NAME πΈ
struct xilinx_dma_chan β the driver-specific DMA channel structure. like, the channel's personality, its whole little world π
β¨ SYNOPSIS β¨
struct xilinx_dma_chan {
struct xilinx_dma_device *xdev;
u32 ctrl_offset;
u32 desc_offset;
spinlock_t lock;
struct list_head pending_list;
struct list_head active_list;
struct list_head done_list;
struct list_head free_seg_list;
struct dma_chan common;
struct dma_pool *desc_pool;
struct device *dev;
int irq;
int id;
enum dma_transfer_direction direction;
int num_frms;
bool has_sg;
bool cyclic;
bool genlock;
bool err;
bool idle;
bool terminating;
struct tasklet_struct tasklet;
struct xilinx_vdma_config config;
bool flush_on_fsync;
u32 desc_pendingcount;
bool ext_addr;
u32 desc_submitcount;
struct xilinx_axidma_tx_segment *seg_v;
struct xilinx_aximcdma_tx_segment *seg_mv;
dma_addr_t seg_p;
struct xilinx_axidma_tx_segment *cyclic_seg_v;
dma_addr_t cyclic_seg_p;
void (*start_transfer)(struct xilinx_dma_chan *chan);
int (*stop_transfer)(struct xilinx_dma_chan *chan);
u16 tdest;
bool has_vflip;
u8 irq_delay;
};
π¦ Members π¦
xdevβ the driver-specific device structure. the parent, the origin story πctrl_offsetβ control registers offset πdesc_offsetβ TX descriptor registers offset πlockβ descriptor operation lock. no cap, everybody needs one πpending_listβ descriptors that are waiting. they're in the queue, bestie β³active_listβ descriptors that are ready to submit π₯done_listβ complete descriptors. ate and left no crumbs βfree_seg_listβ free descriptors, just chilling πcommonβ the DMA common channel π€desc_poolβ the descriptors pool πdevβ the dma deviceirqβ the channel IRQ β‘idβ the channel ID π·οΈdirectionβ transfer direction π§num_frmsβ number of frames ποΈhas_sgβ does it support scatter transfers πͺοΈcyclicβ check for cyclic transfers. it goes around and around, main character energy πgenlockβ support genlock mode πerrβ the channel has errors πidleβ check for channel idle π΄terminatingβ check for channel being synchronized by user πtaskletβ cleanup work after irq π§Ήconfigβ device configuration info βοΈflush_on_fsyncβ flush on Frame sync πΏdesc_pendingcountβ descriptor pending count π’ext_addrβ indicates 64 bit addressing is supported by dma channel πdesc_submitcountβ descriptor h/w submitted count π’seg_vβ statically allocated segments base π§±seg_mvβ statically allocated segments base for MCDMA π§±seg_pβ physical allocated segments base π§±cyclic_seg_vβ statically allocated segment base for cyclic transfers πcyclic_seg_pβ physical allocated segments base for cyclic dma πstart_transferβ differentiate b/w DMA IP's transfer. yes bestie, differentiate b/w, that's literally what the page says π«stop_transferβ differentiate b/w DMA IP's quiesce πtdestβ TDEST value for mcdma π―has_vflipβ S2MM vertical flip πirq_delayβ interrupt delay timeout β°
π SEE ALSO π
the kernel file ./drivers/dma/xilinx/xilinx_dma.c struct, plus this entire friend group of structs and functions β go say hi, iykyk π«Ά
xilinx_vdma_desc_hw(9)struct xilinx_axidma_desc_hw(9)struct xilinx_aximcdma_desc_hw(9)struct xilinx_cdma_desc_hw(9)struct xilinx_vdma_tx_segment(9)struct xilinx_axidma_tx_segment(9)struct xilinx_aximcdma_tx_segment(9)struct xilinx_cdma_tx_segment(9)struct xilinx_dma_tx_descriptor(9)enum xdma_ip_type(9)struct xilinx_dma_device(9)vdma_desc_write_64(9)xilinx_dma_get_metadata_ptr(9)xilinx_vdma_alloc_tx_segment(9)xilinx_cdma_alloc_tx_segment(9)xilinx_axidma_alloc_tx_segment(9)xilinx_aximcdma_alloc_tx_segment(9)xilinx_dma_free_tx_segment(9)xilinx_mcdma_free_tx_segment(9)xilinx_cdma_free_tx_segment(9)xilinx_vdma_free_tx_segment(9)xilinx_dma_alloc_tx_descriptor(9)xilinx_dma_free_tx_descriptor(9)xilinx_dma_free_desc_list(9)xilinx_dma_free_descriptors(9)xilinx_dma_free_chan_resources(9)xilinx_dma_get_residue(9)xilinx_dma_chan_handle_cyclic(9)xilinx_dma_chan_desc_cleanup(9)xilinx_dma_do_tasklet(9)xilinx_dma_alloc_chan_resources(9)xilinx_dma_calc_copysize(9)xilinx_dma_tx_status(9)xilinx_dma_stop_transfer(9)xilinx_cdma_stop_transfer(9)xilinx_dma_start(9)xilinx_vdma_start_transfer(9)xilinx_cdma_start_transfer(9)xilinx_dma_start_transfer(9)xilinx_mcdma_start_transfer(9)xilinx_dma_issue_pending(9)xilinx_dma_device_config(9)xilinx_dma_complete_descriptor(9)xilinx_dma_reset(9)xilinx_dma_chan_reset(9)xilinx_mcdma_irq_handler(9)xilinx_dma_irq_handler(9)append_desc_queue(9)xilinx_dma_tx_submit(9)xilinx_vdma_dma_prep_interleaved(9)xilinx_cdma_prep_memcpy(9)xilinx_dma_prep_peripheral_dma_vec(9)xilinx_dma_prep_slave_sg(9)xilinx_dma_prep_dma_cyclic(9)xilinx_mcdma_prep_slave_sg(9)xilinx_dma_terminate_all(9)xilinx_vdma_channel_set_config(9)xilinx_dma_chan_remove(9)xilinx_dma_chan_probe(9)xilinx_dma_child_probe(9)of_dma_xilinx_xlate(9)xilinx_dma_probe(9)xilinx_dma_remove(9)
and that's the whole page, bestie π«Ά sourced fresh from ./drivers/dma/xilinx and dated October 2026 β go forth and slay your DMA channels β¨π
π
π¦ 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