STRUCT EP93XX_DMA_ENGINE(9)
struct ep93xx_dma_engine(9) π
okay so bestie, welcome to the Kernel API Manual β this page is the EP93xx DMA engine instance and it's honestly a little iconic. β¨ The star is literally struct ep93xx_dma_engine, and we're gonna go through every field, no skipping, periodt. π«Ά
πΈ NAME πΈ
struct ep93xx_dma_engine β the EP93xx DMA engine instance. that's the whole name, bestie π
β¨ SYNOPSIS β¨
here's the struct, exact spacing and semicolons and all β we do not "fix" code in this group chat, we respect it π:
struct ep93xx_dma_engine {
struct dma_device dma_dev;
bool m2m;
int (*hw_setup)(struct ep93xx_dma_chan *);
void (*hw_synchronize)(struct ep93xx_dma_chan *);
void (*hw_shutdown)(struct ep93xx_dma_chan *);
void (*hw_submit)(struct ep93xx_dma_chan *);
int (*hw_interrupt)(struct ep93xx_dma_chan *);
#define INTERRUPT_UNKNOWN 0;
#define INTERRUPT_DONE 1;
#define INTERRUPT_NEXT_BUFFER 2;
size_t num_channels;
struct ep93xx_dma_chan channels[];
};
π«Ά Members π«Ά
dma_devβ holds the dmaengine device. it's the holder of the dmaengine device, periodt πm2mβ is this an M2M or M2P device? the little bool that answers that exact question πhw_setupβ method which sets the channel up for operation. setup era β¨hw_synchronizeβ synchronizes DMA channel termination to current context. syncing the DMA channel termination to the current context, no cap πhw_shutdownβ shuts the channel down and flushes whatever is left. shutdown + flush whatever is left πhw_submitβ pushes active descriptor(s) to the hardware. active descriptor(s) go to the hardware π₯hw_interruptβ handle the interrupt. interrupt-handling duty β‘num_channelsβ number of channels for this instance. the count of channels for this instance π’channelsβ array of channels. literally an array of channels π§
π Description π
okay so here's the tea: there is one instance of this struct for the M2P channels and one for the M2M channels. π«Ά
The hw_xxx methods are used to perform operations which are different on M2M and M2P channels. so yeah, the hw_xxx squad is doing the M2M/M2P-specific work β¨
π¨ important caveat, bestie: these methods are called with channel lock held and interrupts disabled so they cannot sleep. like, do not try to sleep in there β the lock is held and interrupts are disabled. π
π SEE ALSO π
Kernel file ./drivers/dma/ep93xx_dma.c is the source. then here's the whole linked bestie squad:
struct ep93xx_dma_desc(9)struct ep93xx_dma_chan(9)ep93xx_dma_set_active(9)ep93xx_dma_advance_active(9)ep93xx_dma_advance_work(9)ep93xx_dma_tx_submit(9)ep93xx_dma_alloc_chan_resources(9)ep93xx_dma_free_chan_resources(9)ep93xx_dma_prep_dma_memcpy(9)ep93xx_dma_prep_slave_sg(9)ep93xx_dma_prep_dma_cyclic(9)ep93xx_dma_synchronize(9)ep93xx_dma_terminate_all(9)ep93xx_dma_tx_status(9)ep93xx_dma_issue_pending(9)
mwah π okay that's the page! it lives in ./drivers/dma, it's dated October 2026, and it's the struct ep93xx_dma_engine(9) manual page. go be iconic with your DMA engine, bestie πβ¨π
π¦ 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