%PDF-1.5 %���� ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY
Server IP : 49.231.201.246 / Your IP : 216.73.216.126 Web Server : Apache/2.4.18 (Ubuntu) System : Linux 246 4.4.0-210-generic #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021 x86_64 User : root ( 0) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : exec,passthru,shell_exec,system,proc_open,popen,pcntl_exec MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /lib/modules/4.4.0-112-generic/build/arch/cris/include/arch-v32/arch/hwregs/ |
Upload File : |
/* * DMA C definitions and help macros * */ #ifndef dma_h #define dma_h /* registers */ /* Really needed, since both are listed in sw.list? */ #include <arch/hwregs/dma_defs.h> /* descriptors */ // ------------------------------------------------------------ dma_descr_group typedef struct dma_descr_group { struct dma_descr_group *next; unsigned eol : 1; unsigned tol : 1; unsigned bol : 1; unsigned : 1; unsigned intr : 1; unsigned : 2; unsigned en : 1; unsigned : 7; unsigned dis : 1; unsigned md : 16; struct dma_descr_group *up; union { struct dma_descr_context *context; struct dma_descr_group *group; } down; } dma_descr_group; // ---------------------------------------------------------- dma_descr_context typedef struct dma_descr_context { struct dma_descr_context *next; unsigned eol : 1; unsigned : 3; unsigned intr : 1; unsigned : 1; unsigned store_mode : 1; unsigned en : 1; unsigned : 7; unsigned dis : 1; unsigned md0 : 16; unsigned md1; unsigned md2; unsigned md3; unsigned md4; struct dma_descr_data *saved_data; char *saved_data_buf; } dma_descr_context; // ------------------------------------------------------------- dma_descr_data typedef struct dma_descr_data { struct dma_descr_data *next; char *buf; unsigned eol : 1; unsigned : 2; unsigned out_eop : 1; unsigned intr : 1; unsigned wait : 1; unsigned : 2; unsigned : 3; unsigned in_eop : 1; unsigned : 4; unsigned md : 16; char *after; } dma_descr_data; // --------------------------------------------------------------------- macros // enable DMA channel #define DMA_ENABLE( inst ) \ do { reg_dma_rw_cfg e = REG_RD( dma, inst, rw_cfg );\ e.en = regk_dma_yes; \ REG_WR( dma, inst, rw_cfg, e); } while( 0 ) // reset DMA channel #define DMA_RESET( inst ) \ do { reg_dma_rw_cfg r = REG_RD( dma, inst, rw_cfg );\ r.en = regk_dma_no; \ REG_WR( dma, inst, rw_cfg, r); } while( 0 ) // stop DMA channel #define DMA_STOP( inst ) \ do { reg_dma_rw_cfg s = REG_RD( dma, inst, rw_cfg );\ s.stop = regk_dma_yes; \ REG_WR( dma, inst, rw_cfg, s); } while( 0 ) // continue DMA channel operation #define DMA_CONTINUE( inst ) \ do { reg_dma_rw_cfg c = REG_RD( dma, inst, rw_cfg );\ c.stop = regk_dma_no; \ REG_WR( dma, inst, rw_cfg, c); } while( 0 ) // give stream command #define DMA_WR_CMD( inst, cmd_par ) \ do { reg_dma_rw_stream_cmd __x = {0}; \ do { __x = REG_RD(dma, inst, rw_stream_cmd); } while (__x.busy); \ __x.cmd = (cmd_par); \ REG_WR(dma, inst, rw_stream_cmd, __x); \ } while (0) // load: g,c,d:burst #define DMA_START_GROUP( inst, group_descr ) \ do { REG_WR_INT( dma, inst, rw_group, (int) group_descr ); \ DMA_WR_CMD( inst, regk_dma_load_g ); \ DMA_WR_CMD( inst, regk_dma_load_c ); \ DMA_WR_CMD( inst, regk_dma_load_d | regk_dma_burst ); \ } while( 0 ) // load: c,d:burst #define DMA_START_CONTEXT( inst, ctx_descr ) \ do { REG_WR_INT( dma, inst, rw_group_down, (int) ctx_descr ); \ DMA_WR_CMD( inst, regk_dma_load_c ); \ DMA_WR_CMD( inst, regk_dma_load_d | regk_dma_burst ); \ } while( 0 ) // if the DMA is at the end of the data list, the last data descr is reloaded #define DMA_CONTINUE_DATA( inst ) \ do { reg_dma_rw_cmd c = {0}; \ c.cont_data = regk_dma_yes;\ REG_WR( dma, inst, rw_cmd, c ); } while( 0 ) #endif