1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Copyright (C) 2004-2007 Freescale Semiconductor, Inc. 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 5*4882a593Smuzhiyun */ 6*4882a593Smuzhiyun 7*4882a593Smuzhiyun #ifndef _MCD_API_H 8*4882a593Smuzhiyun #define _MCD_API_H 9*4882a593Smuzhiyun 10*4882a593Smuzhiyun /* Turn Execution Unit tasks ON (#define) or OFF (#undef) */ 11*4882a593Smuzhiyun #undef MCD_INCLUDE_EU 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /* Number of DMA channels */ 14*4882a593Smuzhiyun #define NCHANNELS 16 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* Total number of variants */ 17*4882a593Smuzhiyun #ifdef MCD_INCLUDE_EU 18*4882a593Smuzhiyun #define NUMOFVARIANTS 6 19*4882a593Smuzhiyun #else 20*4882a593Smuzhiyun #define NUMOFVARIANTS 4 21*4882a593Smuzhiyun #endif 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun /* Define sizes of the various tables */ 24*4882a593Smuzhiyun #define TASK_TABLE_SIZE (NCHANNELS*32) 25*4882a593Smuzhiyun #define VAR_TAB_SIZE (128) 26*4882a593Smuzhiyun #define CONTEXT_SAVE_SIZE (128) 27*4882a593Smuzhiyun #define FUNCDESC_TAB_SIZE (256) 28*4882a593Smuzhiyun 29*4882a593Smuzhiyun #ifdef MCD_INCLUDE_EU 30*4882a593Smuzhiyun #define FUNCDESC_TAB_NUM 16 31*4882a593Smuzhiyun #else 32*4882a593Smuzhiyun #define FUNCDESC_TAB_NUM 1 33*4882a593Smuzhiyun #endif 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #ifndef DEFINESONLY 36*4882a593Smuzhiyun 37*4882a593Smuzhiyun /* Portability typedefs */ 38*4882a593Smuzhiyun #if 1 39*4882a593Smuzhiyun #include "common.h" 40*4882a593Smuzhiyun #else 41*4882a593Smuzhiyun #ifndef s32 42*4882a593Smuzhiyun typedef int s32; 43*4882a593Smuzhiyun #endif 44*4882a593Smuzhiyun #ifndef u32 45*4882a593Smuzhiyun typedef unsigned int u32; 46*4882a593Smuzhiyun #endif 47*4882a593Smuzhiyun #ifndef s16 48*4882a593Smuzhiyun typedef short s16; 49*4882a593Smuzhiyun #endif 50*4882a593Smuzhiyun #ifndef u16 51*4882a593Smuzhiyun typedef unsigned short u16; 52*4882a593Smuzhiyun #endif 53*4882a593Smuzhiyun #ifndef s8 54*4882a593Smuzhiyun typedef char s8; 55*4882a593Smuzhiyun #endif 56*4882a593Smuzhiyun #ifndef u8 57*4882a593Smuzhiyun typedef unsigned char u8; 58*4882a593Smuzhiyun #endif 59*4882a593Smuzhiyun #endif 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun /* 62*4882a593Smuzhiyun * These structures represent the internal registers of the 63*4882a593Smuzhiyun * multi-channel DMA 64*4882a593Smuzhiyun */ 65*4882a593Smuzhiyun struct dmaRegs_s { 66*4882a593Smuzhiyun u32 taskbar; /* task table base address */ 67*4882a593Smuzhiyun u32 currPtr; 68*4882a593Smuzhiyun u32 endPtr; 69*4882a593Smuzhiyun u32 varTablePtr; 70*4882a593Smuzhiyun u16 dma_rsvd0; 71*4882a593Smuzhiyun u16 ptdControl; /* ptd control */ 72*4882a593Smuzhiyun u32 intPending; /* interrupt pending */ 73*4882a593Smuzhiyun u32 intMask; /* interrupt mask */ 74*4882a593Smuzhiyun u16 taskControl[16]; /* task control */ 75*4882a593Smuzhiyun u8 priority[32]; /* priority */ 76*4882a593Smuzhiyun u32 initiatorMux; /* initiator mux control */ 77*4882a593Smuzhiyun u32 taskSize0; /* task size control 0. */ 78*4882a593Smuzhiyun u32 taskSize1; /* task size control 1. */ 79*4882a593Smuzhiyun u32 dma_rsvd1; /* reserved */ 80*4882a593Smuzhiyun u32 dma_rsvd2; /* reserved */ 81*4882a593Smuzhiyun u32 debugComp1; /* debug comparator 1 */ 82*4882a593Smuzhiyun u32 debugComp2; /* debug comparator 2 */ 83*4882a593Smuzhiyun u32 debugControl; /* debug control */ 84*4882a593Smuzhiyun u32 debugStatus; /* debug status */ 85*4882a593Smuzhiyun u32 ptdDebug; /* priority task decode debug */ 86*4882a593Smuzhiyun u32 dma_rsvd3[31]; /* reserved */ 87*4882a593Smuzhiyun }; 88*4882a593Smuzhiyun typedef volatile struct dmaRegs_s dmaRegs; 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #endif 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun /* PTD contrl reg bits */ 93*4882a593Smuzhiyun #define PTD_CTL_TSK_PRI 0x8000 94*4882a593Smuzhiyun #define PTD_CTL_COMM_PREFETCH 0x0001 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun /* Task Control reg bits and field masks */ 97*4882a593Smuzhiyun #define TASK_CTL_EN 0x8000 98*4882a593Smuzhiyun #define TASK_CTL_VALID 0x4000 99*4882a593Smuzhiyun #define TASK_CTL_ALWAYS 0x2000 100*4882a593Smuzhiyun #define TASK_CTL_INIT_MASK 0x1f00 101*4882a593Smuzhiyun #define TASK_CTL_ASTRT 0x0080 102*4882a593Smuzhiyun #define TASK_CTL_HIPRITSKEN 0x0040 103*4882a593Smuzhiyun #define TASK_CTL_HLDINITNUM 0x0020 104*4882a593Smuzhiyun #define TASK_CTL_ASTSKNUM_MASK 0x000f 105*4882a593Smuzhiyun 106*4882a593Smuzhiyun /* Priority reg bits and field masks */ 107*4882a593Smuzhiyun #define PRIORITY_HLD 0x80 108*4882a593Smuzhiyun #define PRIORITY_PRI_MASK 0x07 109*4882a593Smuzhiyun 110*4882a593Smuzhiyun /* Debug Control reg bits and field masks */ 111*4882a593Smuzhiyun #define DBG_CTL_BLOCK_TASKS_MASK 0xffff0000 112*4882a593Smuzhiyun #define DBG_CTL_AUTO_ARM 0x00008000 113*4882a593Smuzhiyun #define DBG_CTL_BREAK 0x00004000 114*4882a593Smuzhiyun #define DBG_CTL_COMP1_TYP_MASK 0x00003800 115*4882a593Smuzhiyun #define DBG_CTL_COMP2_TYP_MASK 0x00000070 116*4882a593Smuzhiyun #define DBG_CTL_EXT_BREAK 0x00000004 117*4882a593Smuzhiyun #define DBG_CTL_INT_BREAK 0x00000002 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* 120*4882a593Smuzhiyun * PTD Debug reg selector addresses 121*4882a593Smuzhiyun * This reg must be written with a value to show the contents of 122*4882a593Smuzhiyun * one of the desired internal register. 123*4882a593Smuzhiyun */ 124*4882a593Smuzhiyun #define PTD_DBG_REQ 0x00 /* shows the state of 31 initiators */ 125*4882a593Smuzhiyun #define PTD_DBG_TSK_VLD_INIT 0x01 /* shows which 16 tasks are valid and 126*4882a593Smuzhiyun have initiators asserted */ 127*4882a593Smuzhiyun 128*4882a593Smuzhiyun /* General return values */ 129*4882a593Smuzhiyun #define MCD_OK 0 130*4882a593Smuzhiyun #define MCD_ERROR -1 131*4882a593Smuzhiyun #define MCD_TABLE_UNALIGNED -2 132*4882a593Smuzhiyun #define MCD_CHANNEL_INVALID -3 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun /* MCD_initDma input flags */ 135*4882a593Smuzhiyun #define MCD_RELOC_TASKS 0x00000001 136*4882a593Smuzhiyun #define MCD_NO_RELOC_TASKS 0x00000000 137*4882a593Smuzhiyun #define MCD_COMM_PREFETCH_EN 0x00000002 /* MCF547x/548x ONLY */ 138*4882a593Smuzhiyun 139*4882a593Smuzhiyun /* 140*4882a593Smuzhiyun * MCD_dmaStatus Status Values for each channel: 141*4882a593Smuzhiyun * MCD_NO_DMA - No DMA has been requested since reset 142*4882a593Smuzhiyun * MCD_IDLE - DMA active, but the initiator is currently inactive 143*4882a593Smuzhiyun * MCD_RUNNING - DMA active, and the initiator is currently active 144*4882a593Smuzhiyun * MCD_PAUSED - DMA active but it is currently paused 145*4882a593Smuzhiyun * MCD_HALTED - the most recent DMA has been killed with MCD_killTask() 146*4882a593Smuzhiyun * MCD_DONE - the most recent DMA has completed 147*4882a593Smuzhiyun */ 148*4882a593Smuzhiyun #define MCD_NO_DMA 1 149*4882a593Smuzhiyun #define MCD_IDLE 2 150*4882a593Smuzhiyun #define MCD_RUNNING 3 151*4882a593Smuzhiyun #define MCD_PAUSED 4 152*4882a593Smuzhiyun #define MCD_HALTED 5 153*4882a593Smuzhiyun #define MCD_DONE 6 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun /* MCD_startDma parameter defines */ 156*4882a593Smuzhiyun 157*4882a593Smuzhiyun /* Constants for the funcDesc parameter */ 158*4882a593Smuzhiyun /* 159*4882a593Smuzhiyun * MCD_NO_BYTE_SWAP - to disable byte swapping 160*4882a593Smuzhiyun * MCD_BYTE_REVERSE - to reverse the bytes of each u32 of the DMAed data 161*4882a593Smuzhiyun * MCD_U16_REVERSE - to reverse the 16-bit halves of each 32-bit data 162*4882a593Smuzhiyun * value being DMAed 163*4882a593Smuzhiyun * MCD_U16_BYTE_REVERSE - to reverse the byte halves of each 16-bit half of 164*4882a593Smuzhiyun * each 32-bit data value DMAed 165*4882a593Smuzhiyun * MCD_NO_BIT_REV - do not reverse the bits of each byte DMAed 166*4882a593Smuzhiyun * MCD_BIT_REV - reverse the bits of each byte DMAed 167*4882a593Smuzhiyun * MCD_CRC16 - to perform CRC-16 on DMAed data 168*4882a593Smuzhiyun * MCD_CRCCCITT - to perform CRC-CCITT on DMAed data 169*4882a593Smuzhiyun * MCD_CRC32 - to perform CRC-32 on DMAed data 170*4882a593Smuzhiyun * MCD_CSUMINET - to perform internet checksums on DMAed data 171*4882a593Smuzhiyun * MCD_NO_CSUM - to perform no checksumming 172*4882a593Smuzhiyun */ 173*4882a593Smuzhiyun #define MCD_NO_BYTE_SWAP 0x00045670 174*4882a593Smuzhiyun #define MCD_BYTE_REVERSE 0x00076540 175*4882a593Smuzhiyun #define MCD_U16_REVERSE 0x00067450 176*4882a593Smuzhiyun #define MCD_U16_BYTE_REVERSE 0x00054760 177*4882a593Smuzhiyun #define MCD_NO_BIT_REV 0x00000000 178*4882a593Smuzhiyun #define MCD_BIT_REV 0x00088880 179*4882a593Smuzhiyun /* CRCing: */ 180*4882a593Smuzhiyun #define MCD_CRC16 0xc0100000 181*4882a593Smuzhiyun #define MCD_CRCCCITT 0xc0200000 182*4882a593Smuzhiyun #define MCD_CRC32 0xc0300000 183*4882a593Smuzhiyun #define MCD_CSUMINET 0xc0400000 184*4882a593Smuzhiyun #define MCD_NO_CSUM 0xa0000000 185*4882a593Smuzhiyun 186*4882a593Smuzhiyun #define MCD_FUNC_NOEU1 (MCD_NO_BYTE_SWAP | MCD_NO_BIT_REV | \ 187*4882a593Smuzhiyun MCD_NO_CSUM) 188*4882a593Smuzhiyun #define MCD_FUNC_NOEU2 (MCD_NO_BYTE_SWAP | MCD_NO_CSUM) 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun /* Constants for the flags parameter */ 191*4882a593Smuzhiyun #define MCD_TT_FLAGS_RL 0x00000001 /* Read line */ 192*4882a593Smuzhiyun #define MCD_TT_FLAGS_CW 0x00000002 /* Combine Writes */ 193*4882a593Smuzhiyun #define MCD_TT_FLAGS_SP 0x00000004 /* MCF547x/548x ONLY */ 194*4882a593Smuzhiyun #define MCD_TT_FLAGS_MASK 0x000000ff 195*4882a593Smuzhiyun #define MCD_TT_FLAGS_DEF (MCD_TT_FLAGS_RL | MCD_TT_FLAGS_CW) 196*4882a593Smuzhiyun 197*4882a593Smuzhiyun #define MCD_SINGLE_DMA 0x00000100 /* Unchained DMA */ 198*4882a593Smuzhiyun #define MCD_CHAIN_DMA /* TBD */ 199*4882a593Smuzhiyun #define MCD_EU_DMA /* TBD */ 200*4882a593Smuzhiyun #define MCD_FECTX_DMA 0x00001000 /* FEC TX ring DMA */ 201*4882a593Smuzhiyun #define MCD_FECRX_DMA 0x00002000 /* FEC RX ring DMA */ 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun /* these flags are valid for MCD_startDma and the chained buffer descriptors */ 204*4882a593Smuzhiyun /* 205*4882a593Smuzhiyun * MCD_BUF_READY - indicates that this buf is now under the DMA's ctrl 206*4882a593Smuzhiyun * MCD_WRAP - to tell the FEC Dmas to wrap to the first BD 207*4882a593Smuzhiyun * MCD_INTERRUPT - to generate an interrupt after completion of the DMA 208*4882a593Smuzhiyun * MCD_END_FRAME - tell the DMA to end the frame when transferring 209*4882a593Smuzhiyun * last byte of data in buffer 210*4882a593Smuzhiyun * MCD_CRC_RESTART - to empty out the accumulated checksum prior to 211*4882a593Smuzhiyun * performing the DMA 212*4882a593Smuzhiyun */ 213*4882a593Smuzhiyun #define MCD_BUF_READY 0x80000000 214*4882a593Smuzhiyun #define MCD_WRAP 0x20000000 215*4882a593Smuzhiyun #define MCD_INTERRUPT 0x10000000 216*4882a593Smuzhiyun #define MCD_END_FRAME 0x08000000 217*4882a593Smuzhiyun #define MCD_CRC_RESTART 0x40000000 218*4882a593Smuzhiyun 219*4882a593Smuzhiyun /* Defines for the FEC buffer descriptor control/status word*/ 220*4882a593Smuzhiyun #define MCD_FEC_BUF_READY 0x8000 221*4882a593Smuzhiyun #define MCD_FEC_WRAP 0x2000 222*4882a593Smuzhiyun #define MCD_FEC_INTERRUPT 0x1000 223*4882a593Smuzhiyun #define MCD_FEC_END_FRAME 0x0800 224*4882a593Smuzhiyun 225*4882a593Smuzhiyun /* Defines for general intuitiveness */ 226*4882a593Smuzhiyun 227*4882a593Smuzhiyun #define MCD_TRUE 1 228*4882a593Smuzhiyun #define MCD_FALSE 0 229*4882a593Smuzhiyun 230*4882a593Smuzhiyun /* Three different cases for destination and source. */ 231*4882a593Smuzhiyun #define MINUS1 -1 232*4882a593Smuzhiyun #define ZERO 0 233*4882a593Smuzhiyun #define PLUS1 1 234*4882a593Smuzhiyun 235*4882a593Smuzhiyun #ifndef DEFINESONLY 236*4882a593Smuzhiyun 237*4882a593Smuzhiyun /* Task Table Entry struct*/ 238*4882a593Smuzhiyun typedef struct { 239*4882a593Smuzhiyun u32 TDTstart; /* task descriptor table start */ 240*4882a593Smuzhiyun u32 TDTend; /* task descriptor table end */ 241*4882a593Smuzhiyun u32 varTab; /* variable table start */ 242*4882a593Smuzhiyun u32 FDTandFlags; /* function descriptor table start & flags */ 243*4882a593Smuzhiyun volatile u32 descAddrAndStatus; 244*4882a593Smuzhiyun volatile u32 modifiedVarTab; 245*4882a593Smuzhiyun u32 contextSaveSpace; /* context save space start */ 246*4882a593Smuzhiyun u32 literalBases; 247*4882a593Smuzhiyun } TaskTableEntry; 248*4882a593Smuzhiyun 249*4882a593Smuzhiyun /* Chained buffer descriptor: 250*4882a593Smuzhiyun * flags - flags describing the DMA 251*4882a593Smuzhiyun * csumResult - checksum performed since last checksum reset 252*4882a593Smuzhiyun * srcAddr - the address to move data from 253*4882a593Smuzhiyun * destAddr - the address to move data to 254*4882a593Smuzhiyun * lastDestAddr - the last address written to 255*4882a593Smuzhiyun * dmaSize - the no of bytes to xfer independent of the xfer sz 256*4882a593Smuzhiyun * next - next buffer descriptor in chain 257*4882a593Smuzhiyun * info - private info about this descriptor; DMA does not affect it 258*4882a593Smuzhiyun */ 259*4882a593Smuzhiyun typedef volatile struct MCD_bufDesc_struct MCD_bufDesc; 260*4882a593Smuzhiyun struct MCD_bufDesc_struct { 261*4882a593Smuzhiyun u32 flags; 262*4882a593Smuzhiyun u32 csumResult; 263*4882a593Smuzhiyun s8 *srcAddr; 264*4882a593Smuzhiyun s8 *destAddr; 265*4882a593Smuzhiyun s8 *lastDestAddr; 266*4882a593Smuzhiyun u32 dmaSize; 267*4882a593Smuzhiyun MCD_bufDesc *next; 268*4882a593Smuzhiyun u32 info; 269*4882a593Smuzhiyun }; 270*4882a593Smuzhiyun 271*4882a593Smuzhiyun /* Progress Query struct: 272*4882a593Smuzhiyun * lastSrcAddr - the most-recent or last, post-increment source address 273*4882a593Smuzhiyun * lastDestAddr - the most-recent or last, post-increment destination address 274*4882a593Smuzhiyun * dmaSize - the amount of data transferred for the current buffer 275*4882a593Smuzhiyun * currBufDesc - pointer to the current buffer descriptor being DMAed 276*4882a593Smuzhiyun */ 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun typedef volatile struct MCD_XferProg_struct { 279*4882a593Smuzhiyun s8 *lastSrcAddr; 280*4882a593Smuzhiyun s8 *lastDestAddr; 281*4882a593Smuzhiyun u32 dmaSize; 282*4882a593Smuzhiyun MCD_bufDesc *currBufDesc; 283*4882a593Smuzhiyun } MCD_XferProg; 284*4882a593Smuzhiyun 285*4882a593Smuzhiyun /* FEC buffer descriptor */ 286*4882a593Smuzhiyun typedef volatile struct MCD_bufDescFec_struct { 287*4882a593Smuzhiyun u16 statCtrl; 288*4882a593Smuzhiyun u16 length; 289*4882a593Smuzhiyun u32 dataPointer; 290*4882a593Smuzhiyun } MCD_bufDescFec; 291*4882a593Smuzhiyun 292*4882a593Smuzhiyun /*************************************************************************/ 293*4882a593Smuzhiyun /* API function Prototypes - see MCD_dmaApi.c for further notes */ 294*4882a593Smuzhiyun 295*4882a593Smuzhiyun /* MCD_startDma starts a particular kind of DMA: 296*4882a593Smuzhiyun * srcAddr - the channel on which to run the DMA 297*4882a593Smuzhiyun * srcIncr - the address to move data from, or buffer-descriptor address 298*4882a593Smuzhiyun * destAddr - the amount to increment the source address per transfer 299*4882a593Smuzhiyun * destIncr - the address to move data to 300*4882a593Smuzhiyun * dmaSize - the amount to increment the destination address per transfer 301*4882a593Smuzhiyun * xferSize - the number bytes in of each data movement (1, 2, or 4) 302*4882a593Smuzhiyun * initiator - what device initiates the DMA 303*4882a593Smuzhiyun * priority - priority of the DMA 304*4882a593Smuzhiyun * flags - flags describing the DMA 305*4882a593Smuzhiyun * funcDesc - description of byte swapping, bit swapping, and CRC actions 306*4882a593Smuzhiyun */ 307*4882a593Smuzhiyun int MCD_startDma(int channel, s8 * srcAddr, s16 srcIncr, s8 * destAddr, 308*4882a593Smuzhiyun s16 destIncr, u32 dmaSize, u32 xferSize, u32 initiator, 309*4882a593Smuzhiyun int priority, u32 flags, u32 funcDesc); 310*4882a593Smuzhiyun 311*4882a593Smuzhiyun /* 312*4882a593Smuzhiyun * MCD_initDma() initializes the DMA API by setting up a pointer to the DMA 313*4882a593Smuzhiyun * registers, relocating and creating the appropriate task structures, and 314*4882a593Smuzhiyun * setting up some global settings 315*4882a593Smuzhiyun */ 316*4882a593Smuzhiyun int MCD_initDma(dmaRegs * sDmaBarAddr, void *taskTableDest, u32 flags); 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun /* MCD_dmaStatus() returns the status of the DMA on the requested channel. */ 319*4882a593Smuzhiyun int MCD_dmaStatus(int channel); 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun /* MCD_XferProgrQuery() returns progress of DMA on requested channel */ 322*4882a593Smuzhiyun int MCD_XferProgrQuery(int channel, MCD_XferProg * progRep); 323*4882a593Smuzhiyun 324*4882a593Smuzhiyun /* 325*4882a593Smuzhiyun * MCD_killDma() halts the DMA on the requested channel, without any 326*4882a593Smuzhiyun * intention of resuming the DMA. 327*4882a593Smuzhiyun */ 328*4882a593Smuzhiyun int MCD_killDma(int channel); 329*4882a593Smuzhiyun 330*4882a593Smuzhiyun /* 331*4882a593Smuzhiyun * MCD_continDma() continues a DMA which as stopped due to encountering an 332*4882a593Smuzhiyun * unready buffer descriptor. 333*4882a593Smuzhiyun */ 334*4882a593Smuzhiyun int MCD_continDma(int channel); 335*4882a593Smuzhiyun 336*4882a593Smuzhiyun /* 337*4882a593Smuzhiyun * MCD_pauseDma() pauses the DMA on the given channel ( if any DMA is 338*4882a593Smuzhiyun * running on that channel). 339*4882a593Smuzhiyun */ 340*4882a593Smuzhiyun int MCD_pauseDma(int channel); 341*4882a593Smuzhiyun 342*4882a593Smuzhiyun /* 343*4882a593Smuzhiyun * MCD_resumeDma() resumes the DMA on a given channel (if any DMA is 344*4882a593Smuzhiyun * running on that channel). 345*4882a593Smuzhiyun */ 346*4882a593Smuzhiyun int MCD_resumeDma(int channel); 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun /* MCD_csumQuery provides the checksum/CRC after performing a non-chained DMA */ 349*4882a593Smuzhiyun int MCD_csumQuery(int channel, u32 * csum); 350*4882a593Smuzhiyun 351*4882a593Smuzhiyun /* 352*4882a593Smuzhiyun * MCD_getCodeSize provides the packed size required by the microcoded task 353*4882a593Smuzhiyun * and structures. 354*4882a593Smuzhiyun */ 355*4882a593Smuzhiyun int MCD_getCodeSize(void); 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun /* 358*4882a593Smuzhiyun * MCD_getVersion provides a pointer to a version string and returns a 359*4882a593Smuzhiyun * version number. 360*4882a593Smuzhiyun */ 361*4882a593Smuzhiyun int MCD_getVersion(char **longVersion); 362*4882a593Smuzhiyun 363*4882a593Smuzhiyun /* macro for setting a location in the variable table */ 364*4882a593Smuzhiyun #define MCD_SET_VAR(taskTab,idx,value) ((u32 *)(taskTab)->varTab)[idx] = value 365*4882a593Smuzhiyun /* Note that MCD_SET_VAR() is invoked many times in firing up a DMA function, 366*4882a593Smuzhiyun so I'm avoiding surrounding it with "do {} while(0)" */ 367*4882a593Smuzhiyun 368*4882a593Smuzhiyun #endif /* DEFINESONLY */ 369*4882a593Smuzhiyun 370*4882a593Smuzhiyun #endif /* _MCD_API_H */ 371