1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */ 272f56adcSTsiChungLiew /* 372f56adcSTsiChungLiew * Copyright (C) 2004-2007 Freescale Semiconductor, Inc. 472f56adcSTsiChungLiew */ 572f56adcSTsiChungLiew 672f56adcSTsiChungLiew #ifndef _MCD_API_H 772f56adcSTsiChungLiew #define _MCD_API_H 872f56adcSTsiChungLiew 972f56adcSTsiChungLiew /* Turn Execution Unit tasks ON (#define) or OFF (#undef) */ 1072f56adcSTsiChungLiew #undef MCD_INCLUDE_EU 1172f56adcSTsiChungLiew 1272f56adcSTsiChungLiew /* Number of DMA channels */ 1372f56adcSTsiChungLiew #define NCHANNELS 16 1472f56adcSTsiChungLiew 1572f56adcSTsiChungLiew /* Total number of variants */ 1672f56adcSTsiChungLiew #ifdef MCD_INCLUDE_EU 1772f56adcSTsiChungLiew #define NUMOFVARIANTS 6 1872f56adcSTsiChungLiew #else 1972f56adcSTsiChungLiew #define NUMOFVARIANTS 4 2072f56adcSTsiChungLiew #endif 2172f56adcSTsiChungLiew 2272f56adcSTsiChungLiew /* Define sizes of the various tables */ 2372f56adcSTsiChungLiew #define TASK_TABLE_SIZE (NCHANNELS*32) 2472f56adcSTsiChungLiew #define VAR_TAB_SIZE (128) 2572f56adcSTsiChungLiew #define CONTEXT_SAVE_SIZE (128) 2672f56adcSTsiChungLiew #define FUNCDESC_TAB_SIZE (256) 2772f56adcSTsiChungLiew 2872f56adcSTsiChungLiew #ifdef MCD_INCLUDE_EU 2972f56adcSTsiChungLiew #define FUNCDESC_TAB_NUM 16 3072f56adcSTsiChungLiew #else 3172f56adcSTsiChungLiew #define FUNCDESC_TAB_NUM 1 3272f56adcSTsiChungLiew #endif 3372f56adcSTsiChungLiew 3472f56adcSTsiChungLiew #ifndef DEFINESONLY 3572f56adcSTsiChungLiew 3672f56adcSTsiChungLiew /* Portability typedefs */ 3772f56adcSTsiChungLiew #if 1 3872f56adcSTsiChungLiew #include "common.h" 3972f56adcSTsiChungLiew #else 4072f56adcSTsiChungLiew #ifndef s32 4172f56adcSTsiChungLiew typedef int s32; 4272f56adcSTsiChungLiew #endif 4372f56adcSTsiChungLiew #ifndef u32 4472f56adcSTsiChungLiew typedef unsigned int u32; 4572f56adcSTsiChungLiew #endif 4672f56adcSTsiChungLiew #ifndef s16 4772f56adcSTsiChungLiew typedef short s16; 4872f56adcSTsiChungLiew #endif 4972f56adcSTsiChungLiew #ifndef u16 5072f56adcSTsiChungLiew typedef unsigned short u16; 5172f56adcSTsiChungLiew #endif 5272f56adcSTsiChungLiew #ifndef s8 5372f56adcSTsiChungLiew typedef char s8; 5472f56adcSTsiChungLiew #endif 5572f56adcSTsiChungLiew #ifndef u8 5672f56adcSTsiChungLiew typedef unsigned char u8; 5772f56adcSTsiChungLiew #endif 5872f56adcSTsiChungLiew #endif 5972f56adcSTsiChungLiew 6072f56adcSTsiChungLiew /* 6172f56adcSTsiChungLiew * These structures represent the internal registers of the 6272f56adcSTsiChungLiew * multi-channel DMA 6372f56adcSTsiChungLiew */ 6472f56adcSTsiChungLiew struct dmaRegs_s { 6572f56adcSTsiChungLiew u32 taskbar; /* task table base address */ 6672f56adcSTsiChungLiew u32 currPtr; 6772f56adcSTsiChungLiew u32 endPtr; 6872f56adcSTsiChungLiew u32 varTablePtr; 6972f56adcSTsiChungLiew u16 dma_rsvd0; 7072f56adcSTsiChungLiew u16 ptdControl; /* ptd control */ 7172f56adcSTsiChungLiew u32 intPending; /* interrupt pending */ 7272f56adcSTsiChungLiew u32 intMask; /* interrupt mask */ 7372f56adcSTsiChungLiew u16 taskControl[16]; /* task control */ 7472f56adcSTsiChungLiew u8 priority[32]; /* priority */ 7572f56adcSTsiChungLiew u32 initiatorMux; /* initiator mux control */ 7672f56adcSTsiChungLiew u32 taskSize0; /* task size control 0. */ 7772f56adcSTsiChungLiew u32 taskSize1; /* task size control 1. */ 7872f56adcSTsiChungLiew u32 dma_rsvd1; /* reserved */ 7972f56adcSTsiChungLiew u32 dma_rsvd2; /* reserved */ 8072f56adcSTsiChungLiew u32 debugComp1; /* debug comparator 1 */ 8172f56adcSTsiChungLiew u32 debugComp2; /* debug comparator 2 */ 8272f56adcSTsiChungLiew u32 debugControl; /* debug control */ 8372f56adcSTsiChungLiew u32 debugStatus; /* debug status */ 8472f56adcSTsiChungLiew u32 ptdDebug; /* priority task decode debug */ 8572f56adcSTsiChungLiew u32 dma_rsvd3[31]; /* reserved */ 8672f56adcSTsiChungLiew }; 8772f56adcSTsiChungLiew typedef volatile struct dmaRegs_s dmaRegs; 8872f56adcSTsiChungLiew 8972f56adcSTsiChungLiew #endif 9072f56adcSTsiChungLiew 9172f56adcSTsiChungLiew /* PTD contrl reg bits */ 9272f56adcSTsiChungLiew #define PTD_CTL_TSK_PRI 0x8000 9372f56adcSTsiChungLiew #define PTD_CTL_COMM_PREFETCH 0x0001 9472f56adcSTsiChungLiew 9572f56adcSTsiChungLiew /* Task Control reg bits and field masks */ 9672f56adcSTsiChungLiew #define TASK_CTL_EN 0x8000 9772f56adcSTsiChungLiew #define TASK_CTL_VALID 0x4000 9872f56adcSTsiChungLiew #define TASK_CTL_ALWAYS 0x2000 9972f56adcSTsiChungLiew #define TASK_CTL_INIT_MASK 0x1f00 10072f56adcSTsiChungLiew #define TASK_CTL_ASTRT 0x0080 10172f56adcSTsiChungLiew #define TASK_CTL_HIPRITSKEN 0x0040 10272f56adcSTsiChungLiew #define TASK_CTL_HLDINITNUM 0x0020 10372f56adcSTsiChungLiew #define TASK_CTL_ASTSKNUM_MASK 0x000f 10472f56adcSTsiChungLiew 10572f56adcSTsiChungLiew /* Priority reg bits and field masks */ 10672f56adcSTsiChungLiew #define PRIORITY_HLD 0x80 10772f56adcSTsiChungLiew #define PRIORITY_PRI_MASK 0x07 10872f56adcSTsiChungLiew 10972f56adcSTsiChungLiew /* Debug Control reg bits and field masks */ 11072f56adcSTsiChungLiew #define DBG_CTL_BLOCK_TASKS_MASK 0xffff0000 11172f56adcSTsiChungLiew #define DBG_CTL_AUTO_ARM 0x00008000 11272f56adcSTsiChungLiew #define DBG_CTL_BREAK 0x00004000 11372f56adcSTsiChungLiew #define DBG_CTL_COMP1_TYP_MASK 0x00003800 11472f56adcSTsiChungLiew #define DBG_CTL_COMP2_TYP_MASK 0x00000070 11572f56adcSTsiChungLiew #define DBG_CTL_EXT_BREAK 0x00000004 11672f56adcSTsiChungLiew #define DBG_CTL_INT_BREAK 0x00000002 11772f56adcSTsiChungLiew 11872f56adcSTsiChungLiew /* 11972f56adcSTsiChungLiew * PTD Debug reg selector addresses 12072f56adcSTsiChungLiew * This reg must be written with a value to show the contents of 12172f56adcSTsiChungLiew * one of the desired internal register. 12272f56adcSTsiChungLiew */ 12372f56adcSTsiChungLiew #define PTD_DBG_REQ 0x00 /* shows the state of 31 initiators */ 12472f56adcSTsiChungLiew #define PTD_DBG_TSK_VLD_INIT 0x01 /* shows which 16 tasks are valid and 12572f56adcSTsiChungLiew have initiators asserted */ 12672f56adcSTsiChungLiew 12772f56adcSTsiChungLiew /* General return values */ 12872f56adcSTsiChungLiew #define MCD_OK 0 12972f56adcSTsiChungLiew #define MCD_ERROR -1 13072f56adcSTsiChungLiew #define MCD_TABLE_UNALIGNED -2 13172f56adcSTsiChungLiew #define MCD_CHANNEL_INVALID -3 13272f56adcSTsiChungLiew 13372f56adcSTsiChungLiew /* MCD_initDma input flags */ 13472f56adcSTsiChungLiew #define MCD_RELOC_TASKS 0x00000001 13572f56adcSTsiChungLiew #define MCD_NO_RELOC_TASKS 0x00000000 13672f56adcSTsiChungLiew #define MCD_COMM_PREFETCH_EN 0x00000002 /* MCF547x/548x ONLY */ 13772f56adcSTsiChungLiew 13872f56adcSTsiChungLiew /* 13972f56adcSTsiChungLiew * MCD_dmaStatus Status Values for each channel: 14072f56adcSTsiChungLiew * MCD_NO_DMA - No DMA has been requested since reset 14172f56adcSTsiChungLiew * MCD_IDLE - DMA active, but the initiator is currently inactive 14272f56adcSTsiChungLiew * MCD_RUNNING - DMA active, and the initiator is currently active 14372f56adcSTsiChungLiew * MCD_PAUSED - DMA active but it is currently paused 14472f56adcSTsiChungLiew * MCD_HALTED - the most recent DMA has been killed with MCD_killTask() 14572f56adcSTsiChungLiew * MCD_DONE - the most recent DMA has completed 14672f56adcSTsiChungLiew */ 14772f56adcSTsiChungLiew #define MCD_NO_DMA 1 14872f56adcSTsiChungLiew #define MCD_IDLE 2 14972f56adcSTsiChungLiew #define MCD_RUNNING 3 15072f56adcSTsiChungLiew #define MCD_PAUSED 4 15172f56adcSTsiChungLiew #define MCD_HALTED 5 15272f56adcSTsiChungLiew #define MCD_DONE 6 15372f56adcSTsiChungLiew 15472f56adcSTsiChungLiew /* MCD_startDma parameter defines */ 15572f56adcSTsiChungLiew 15672f56adcSTsiChungLiew /* Constants for the funcDesc parameter */ 15772f56adcSTsiChungLiew /* 15872f56adcSTsiChungLiew * MCD_NO_BYTE_SWAP - to disable byte swapping 15972f56adcSTsiChungLiew * MCD_BYTE_REVERSE - to reverse the bytes of each u32 of the DMAed data 16072f56adcSTsiChungLiew * MCD_U16_REVERSE - to reverse the 16-bit halves of each 32-bit data 16172f56adcSTsiChungLiew * value being DMAed 16272f56adcSTsiChungLiew * MCD_U16_BYTE_REVERSE - to reverse the byte halves of each 16-bit half of 16372f56adcSTsiChungLiew * each 32-bit data value DMAed 16472f56adcSTsiChungLiew * MCD_NO_BIT_REV - do not reverse the bits of each byte DMAed 16572f56adcSTsiChungLiew * MCD_BIT_REV - reverse the bits of each byte DMAed 16672f56adcSTsiChungLiew * MCD_CRC16 - to perform CRC-16 on DMAed data 16772f56adcSTsiChungLiew * MCD_CRCCCITT - to perform CRC-CCITT on DMAed data 16872f56adcSTsiChungLiew * MCD_CRC32 - to perform CRC-32 on DMAed data 16972f56adcSTsiChungLiew * MCD_CSUMINET - to perform internet checksums on DMAed data 17072f56adcSTsiChungLiew * MCD_NO_CSUM - to perform no checksumming 17172f56adcSTsiChungLiew */ 17272f56adcSTsiChungLiew #define MCD_NO_BYTE_SWAP 0x00045670 17372f56adcSTsiChungLiew #define MCD_BYTE_REVERSE 0x00076540 17472f56adcSTsiChungLiew #define MCD_U16_REVERSE 0x00067450 17572f56adcSTsiChungLiew #define MCD_U16_BYTE_REVERSE 0x00054760 17672f56adcSTsiChungLiew #define MCD_NO_BIT_REV 0x00000000 17772f56adcSTsiChungLiew #define MCD_BIT_REV 0x00088880 17872f56adcSTsiChungLiew /* CRCing: */ 17972f56adcSTsiChungLiew #define MCD_CRC16 0xc0100000 18072f56adcSTsiChungLiew #define MCD_CRCCCITT 0xc0200000 18172f56adcSTsiChungLiew #define MCD_CRC32 0xc0300000 18272f56adcSTsiChungLiew #define MCD_CSUMINET 0xc0400000 18372f56adcSTsiChungLiew #define MCD_NO_CSUM 0xa0000000 18472f56adcSTsiChungLiew 18572f56adcSTsiChungLiew #define MCD_FUNC_NOEU1 (MCD_NO_BYTE_SWAP | MCD_NO_BIT_REV | \ 18672f56adcSTsiChungLiew MCD_NO_CSUM) 18772f56adcSTsiChungLiew #define MCD_FUNC_NOEU2 (MCD_NO_BYTE_SWAP | MCD_NO_CSUM) 18872f56adcSTsiChungLiew 18972f56adcSTsiChungLiew /* Constants for the flags parameter */ 19072f56adcSTsiChungLiew #define MCD_TT_FLAGS_RL 0x00000001 /* Read line */ 19172f56adcSTsiChungLiew #define MCD_TT_FLAGS_CW 0x00000002 /* Combine Writes */ 19272f56adcSTsiChungLiew #define MCD_TT_FLAGS_SP 0x00000004 /* MCF547x/548x ONLY */ 19372f56adcSTsiChungLiew #define MCD_TT_FLAGS_MASK 0x000000ff 19472f56adcSTsiChungLiew #define MCD_TT_FLAGS_DEF (MCD_TT_FLAGS_RL | MCD_TT_FLAGS_CW) 19572f56adcSTsiChungLiew 19672f56adcSTsiChungLiew #define MCD_SINGLE_DMA 0x00000100 /* Unchained DMA */ 19772f56adcSTsiChungLiew #define MCD_CHAIN_DMA /* TBD */ 19872f56adcSTsiChungLiew #define MCD_EU_DMA /* TBD */ 19972f56adcSTsiChungLiew #define MCD_FECTX_DMA 0x00001000 /* FEC TX ring DMA */ 20072f56adcSTsiChungLiew #define MCD_FECRX_DMA 0x00002000 /* FEC RX ring DMA */ 20172f56adcSTsiChungLiew 20272f56adcSTsiChungLiew /* these flags are valid for MCD_startDma and the chained buffer descriptors */ 20372f56adcSTsiChungLiew /* 20472f56adcSTsiChungLiew * MCD_BUF_READY - indicates that this buf is now under the DMA's ctrl 20572f56adcSTsiChungLiew * MCD_WRAP - to tell the FEC Dmas to wrap to the first BD 20672f56adcSTsiChungLiew * MCD_INTERRUPT - to generate an interrupt after completion of the DMA 20772f56adcSTsiChungLiew * MCD_END_FRAME - tell the DMA to end the frame when transferring 20872f56adcSTsiChungLiew * last byte of data in buffer 20972f56adcSTsiChungLiew * MCD_CRC_RESTART - to empty out the accumulated checksum prior to 21072f56adcSTsiChungLiew * performing the DMA 21172f56adcSTsiChungLiew */ 21272f56adcSTsiChungLiew #define MCD_BUF_READY 0x80000000 21372f56adcSTsiChungLiew #define MCD_WRAP 0x20000000 21472f56adcSTsiChungLiew #define MCD_INTERRUPT 0x10000000 21572f56adcSTsiChungLiew #define MCD_END_FRAME 0x08000000 21672f56adcSTsiChungLiew #define MCD_CRC_RESTART 0x40000000 21772f56adcSTsiChungLiew 21872f56adcSTsiChungLiew /* Defines for the FEC buffer descriptor control/status word*/ 21972f56adcSTsiChungLiew #define MCD_FEC_BUF_READY 0x8000 22072f56adcSTsiChungLiew #define MCD_FEC_WRAP 0x2000 22172f56adcSTsiChungLiew #define MCD_FEC_INTERRUPT 0x1000 22272f56adcSTsiChungLiew #define MCD_FEC_END_FRAME 0x0800 22372f56adcSTsiChungLiew 22472f56adcSTsiChungLiew /* Defines for general intuitiveness */ 22572f56adcSTsiChungLiew 22672f56adcSTsiChungLiew #define MCD_TRUE 1 22772f56adcSTsiChungLiew #define MCD_FALSE 0 22872f56adcSTsiChungLiew 22972f56adcSTsiChungLiew /* Three different cases for destination and source. */ 23072f56adcSTsiChungLiew #define MINUS1 -1 23172f56adcSTsiChungLiew #define ZERO 0 23272f56adcSTsiChungLiew #define PLUS1 1 23372f56adcSTsiChungLiew 23472f56adcSTsiChungLiew #ifndef DEFINESONLY 23572f56adcSTsiChungLiew 23672f56adcSTsiChungLiew /* Task Table Entry struct*/ 23772f56adcSTsiChungLiew typedef struct { 23872f56adcSTsiChungLiew u32 TDTstart; /* task descriptor table start */ 23972f56adcSTsiChungLiew u32 TDTend; /* task descriptor table end */ 24072f56adcSTsiChungLiew u32 varTab; /* variable table start */ 24172f56adcSTsiChungLiew u32 FDTandFlags; /* function descriptor table start & flags */ 24272f56adcSTsiChungLiew volatile u32 descAddrAndStatus; 24372f56adcSTsiChungLiew volatile u32 modifiedVarTab; 24472f56adcSTsiChungLiew u32 contextSaveSpace; /* context save space start */ 24572f56adcSTsiChungLiew u32 literalBases; 24672f56adcSTsiChungLiew } TaskTableEntry; 24772f56adcSTsiChungLiew 24872f56adcSTsiChungLiew /* Chained buffer descriptor: 24972f56adcSTsiChungLiew * flags - flags describing the DMA 25072f56adcSTsiChungLiew * csumResult - checksum performed since last checksum reset 25172f56adcSTsiChungLiew * srcAddr - the address to move data from 25272f56adcSTsiChungLiew * destAddr - the address to move data to 25372f56adcSTsiChungLiew * lastDestAddr - the last address written to 25472f56adcSTsiChungLiew * dmaSize - the no of bytes to xfer independent of the xfer sz 25572f56adcSTsiChungLiew * next - next buffer descriptor in chain 25672f56adcSTsiChungLiew * info - private info about this descriptor; DMA does not affect it 25772f56adcSTsiChungLiew */ 25872f56adcSTsiChungLiew typedef volatile struct MCD_bufDesc_struct MCD_bufDesc; 25972f56adcSTsiChungLiew struct MCD_bufDesc_struct { 26072f56adcSTsiChungLiew u32 flags; 26172f56adcSTsiChungLiew u32 csumResult; 26272f56adcSTsiChungLiew s8 *srcAddr; 26372f56adcSTsiChungLiew s8 *destAddr; 26472f56adcSTsiChungLiew s8 *lastDestAddr; 26572f56adcSTsiChungLiew u32 dmaSize; 26672f56adcSTsiChungLiew MCD_bufDesc *next; 26772f56adcSTsiChungLiew u32 info; 26872f56adcSTsiChungLiew }; 26972f56adcSTsiChungLiew 27072f56adcSTsiChungLiew /* Progress Query struct: 27172f56adcSTsiChungLiew * lastSrcAddr - the most-recent or last, post-increment source address 27272f56adcSTsiChungLiew * lastDestAddr - the most-recent or last, post-increment destination address 27372f56adcSTsiChungLiew * dmaSize - the amount of data transferred for the current buffer 27472f56adcSTsiChungLiew * currBufDesc - pointer to the current buffer descriptor being DMAed 27572f56adcSTsiChungLiew */ 27672f56adcSTsiChungLiew 27772f56adcSTsiChungLiew typedef volatile struct MCD_XferProg_struct { 27872f56adcSTsiChungLiew s8 *lastSrcAddr; 27972f56adcSTsiChungLiew s8 *lastDestAddr; 28072f56adcSTsiChungLiew u32 dmaSize; 28172f56adcSTsiChungLiew MCD_bufDesc *currBufDesc; 28272f56adcSTsiChungLiew } MCD_XferProg; 28372f56adcSTsiChungLiew 28472f56adcSTsiChungLiew /* FEC buffer descriptor */ 28572f56adcSTsiChungLiew typedef volatile struct MCD_bufDescFec_struct { 28672f56adcSTsiChungLiew u16 statCtrl; 28772f56adcSTsiChungLiew u16 length; 28872f56adcSTsiChungLiew u32 dataPointer; 28972f56adcSTsiChungLiew } MCD_bufDescFec; 29072f56adcSTsiChungLiew 29172f56adcSTsiChungLiew /*************************************************************************/ 29272f56adcSTsiChungLiew /* API function Prototypes - see MCD_dmaApi.c for further notes */ 29372f56adcSTsiChungLiew 29472f56adcSTsiChungLiew /* MCD_startDma starts a particular kind of DMA: 29572f56adcSTsiChungLiew * srcAddr - the channel on which to run the DMA 29672f56adcSTsiChungLiew * srcIncr - the address to move data from, or buffer-descriptor address 29772f56adcSTsiChungLiew * destAddr - the amount to increment the source address per transfer 29872f56adcSTsiChungLiew * destIncr - the address to move data to 29972f56adcSTsiChungLiew * dmaSize - the amount to increment the destination address per transfer 30072f56adcSTsiChungLiew * xferSize - the number bytes in of each data movement (1, 2, or 4) 30172f56adcSTsiChungLiew * initiator - what device initiates the DMA 30272f56adcSTsiChungLiew * priority - priority of the DMA 30372f56adcSTsiChungLiew * flags - flags describing the DMA 30472f56adcSTsiChungLiew * funcDesc - description of byte swapping, bit swapping, and CRC actions 30572f56adcSTsiChungLiew */ 30672f56adcSTsiChungLiew int MCD_startDma(int channel, s8 * srcAddr, s16 srcIncr, s8 * destAddr, 30772f56adcSTsiChungLiew s16 destIncr, u32 dmaSize, u32 xferSize, u32 initiator, 30872f56adcSTsiChungLiew int priority, u32 flags, u32 funcDesc); 30972f56adcSTsiChungLiew 31072f56adcSTsiChungLiew /* 31172f56adcSTsiChungLiew * MCD_initDma() initializes the DMA API by setting up a pointer to the DMA 31272f56adcSTsiChungLiew * registers, relocating and creating the appropriate task structures, and 31372f56adcSTsiChungLiew * setting up some global settings 31472f56adcSTsiChungLiew */ 31572f56adcSTsiChungLiew int MCD_initDma(dmaRegs * sDmaBarAddr, void *taskTableDest, u32 flags); 31672f56adcSTsiChungLiew 31772f56adcSTsiChungLiew /* MCD_dmaStatus() returns the status of the DMA on the requested channel. */ 31872f56adcSTsiChungLiew int MCD_dmaStatus(int channel); 31972f56adcSTsiChungLiew 32072f56adcSTsiChungLiew /* MCD_XferProgrQuery() returns progress of DMA on requested channel */ 32172f56adcSTsiChungLiew int MCD_XferProgrQuery(int channel, MCD_XferProg * progRep); 32272f56adcSTsiChungLiew 32372f56adcSTsiChungLiew /* 32472f56adcSTsiChungLiew * MCD_killDma() halts the DMA on the requested channel, without any 32572f56adcSTsiChungLiew * intention of resuming the DMA. 32672f56adcSTsiChungLiew */ 32772f56adcSTsiChungLiew int MCD_killDma(int channel); 32872f56adcSTsiChungLiew 32972f56adcSTsiChungLiew /* 33072f56adcSTsiChungLiew * MCD_continDma() continues a DMA which as stopped due to encountering an 33172f56adcSTsiChungLiew * unready buffer descriptor. 33272f56adcSTsiChungLiew */ 33372f56adcSTsiChungLiew int MCD_continDma(int channel); 33472f56adcSTsiChungLiew 33572f56adcSTsiChungLiew /* 33672f56adcSTsiChungLiew * MCD_pauseDma() pauses the DMA on the given channel ( if any DMA is 33772f56adcSTsiChungLiew * running on that channel). 33872f56adcSTsiChungLiew */ 33972f56adcSTsiChungLiew int MCD_pauseDma(int channel); 34072f56adcSTsiChungLiew 34172f56adcSTsiChungLiew /* 34272f56adcSTsiChungLiew * MCD_resumeDma() resumes the DMA on a given channel (if any DMA is 34372f56adcSTsiChungLiew * running on that channel). 34472f56adcSTsiChungLiew */ 34572f56adcSTsiChungLiew int MCD_resumeDma(int channel); 34672f56adcSTsiChungLiew 34772f56adcSTsiChungLiew /* MCD_csumQuery provides the checksum/CRC after performing a non-chained DMA */ 34872f56adcSTsiChungLiew int MCD_csumQuery(int channel, u32 * csum); 34972f56adcSTsiChungLiew 35072f56adcSTsiChungLiew /* 35172f56adcSTsiChungLiew * MCD_getCodeSize provides the packed size required by the microcoded task 35272f56adcSTsiChungLiew * and structures. 35372f56adcSTsiChungLiew */ 35472f56adcSTsiChungLiew int MCD_getCodeSize(void); 35572f56adcSTsiChungLiew 35672f56adcSTsiChungLiew /* 35772f56adcSTsiChungLiew * MCD_getVersion provides a pointer to a version string and returns a 35872f56adcSTsiChungLiew * version number. 35972f56adcSTsiChungLiew */ 36072f56adcSTsiChungLiew int MCD_getVersion(char **longVersion); 36172f56adcSTsiChungLiew 36272f56adcSTsiChungLiew /* macro for setting a location in the variable table */ 36372f56adcSTsiChungLiew #define MCD_SET_VAR(taskTab,idx,value) ((u32 *)(taskTab)->varTab)[idx] = value 36472f56adcSTsiChungLiew /* Note that MCD_SET_VAR() is invoked many times in firing up a DMA function, 36572f56adcSTsiChungLiew so I'm avoiding surrounding it with "do {} while(0)" */ 36672f56adcSTsiChungLiew 36772f56adcSTsiChungLiew #endif /* DEFINESONLY */ 36872f56adcSTsiChungLiew 36972f56adcSTsiChungLiew #endif /* _MCD_API_H */ 370