ShellBanner
System:Linux MiraNet 3.0.0-14-generic-pae #23-Ubuntu SMP Mon Nov 21 22:07:10 UTC 2011 i686
Software:Apache. PHP/5.3.6-13ubuntu3.10
ID:uid=65534(nobody) gid=65534(nogroup) groups=65534(nogroup)
Safe Mode:OFF
Open_Basedir:OFF
Freespace:20.5 GB of 70.42 GB (29.12%)
MySQL: ON MSSQL: OFF Oracle: OFF PostgreSQL: OFF Curl: OFF Sockets: ON Fetch: OFF Wget: ON Perl: ON
Disabled Functions: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,

/ usr/ src/ linux-headers-3.0.0-14/ arch/ arm/ mach-bcmring/ include/ csp/ - drwxr-xr-x

Directory:
Viewing file:     dmacHw.h (24.17 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*****************************************************************************
* Copyright 2004 - 2008 Broadcom Corporation.  All rights reserved.
*
* Unless you and Broadcom execute a separate written software license
* agreement governing use of this software, this software is licensed to you
* under the terms of the GNU General Public License version 2, available at
* http://www.broadcom.com/licenses/GPLv2.php (the "GPL").
*
* Notwithstanding the above, under no circumstances may you combine this
* software in any way with any other Broadcom software provided under a
* license other than the GPL, without Broadcom's express prior written
* consent.
*****************************************************************************/

/****************************************************************************/
/**
*  @file    dmacHw.h
*
*  @brief   API definitions for low level DMA controller driver
*
*/
/****************************************************************************/
#ifndef _DMACHW_H
#define _DMACHW_H

#include <stddef.h>

#include <csp/stdint.h>
#include <mach/csp/dmacHw_reg.h>

/* Define DMA Channel ID using DMA controller number (m) and channel number (c).

   System specific channel ID should be defined as follows

   For example:

   #include <dmacHw.h>
   ...
   #define systemHw_LCD_CHANNEL_ID                dmacHw_MAKE_CHANNEL_ID(0,5)
   #define systemHw_SWITCH_RX_CHANNEL_ID          dmacHw_MAKE_CHANNEL_ID(0,0)
   #define systemHw_SWITCH_TX_CHANNEL_ID          dmacHw_MAKE_CHANNEL_ID(0,1)
   #define systemHw_APM_RX_CHANNEL_ID             dmacHw_MAKE_CHANNEL_ID(0,3)
   #define systemHw_APM_TX_CHANNEL_ID             dmacHw_MAKE_CHANNEL_ID(0,4)
   ...
   #define systemHw_SHARED1_CHANNEL_ID            dmacHw_MAKE_CHANNEL_ID(1,4)
   #define systemHw_SHARED2_CHANNEL_ID            dmacHw_MAKE_CHANNEL_ID(1,5)
   #define systemHw_SHARED3_CHANNEL_ID            dmacHw_MAKE_CHANNEL_ID(0,6)
   ...
*/
#define dmacHw_MAKE_CHANNEL_ID(m, c)         (m << 8 | c)

typedef enum {
    dmacHw_CHANNEL_PRIORITY_0 = dmacHw_REG_CFG_LO_CH_PRIORITY_0,    /* Channel priority 0. Lowest priority DMA channel */
    dmacHw_CHANNEL_PRIORITY_1 = dmacHw_REG_CFG_LO_CH_PRIORITY_1,    /* Channel priority 1 */
    dmacHw_CHANNEL_PRIORITY_2 = dmacHw_REG_CFG_LO_CH_PRIORITY_2,    /* Channel priority 2 */
    dmacHw_CHANNEL_PRIORITY_3 = dmacHw_REG_CFG_LO_CH_PRIORITY_3,    /* Channel priority 3 */
    dmacHw_CHANNEL_PRIORITY_4 = dmacHw_REG_CFG_LO_CH_PRIORITY_4,    /* Channel priority 4 */
    dmacHw_CHANNEL_PRIORITY_5 = dmacHw_REG_CFG_LO_CH_PRIORITY_5,    /* Channel priority 5 */
    dmacHw_CHANNEL_PRIORITY_6 = dmacHw_REG_CFG_LO_CH_PRIORITY_6,    /* Channel priority 6 */
    dmacHw_CHANNEL_PRIORITY_7 = dmacHw_REG_CFG_LO_CH_PRIORITY_7    /* Channel priority 7. Highest priority DMA channel */
} dmacHw_CHANNEL_PRIORITY_e;

/* Source destination master interface */
typedef enum {
    dmacHw_SRC_MASTER_INTERFACE_1 = dmacHw_REG_CTL_SMS_1,    /* Source DMA master interface 1 */
    dmacHw_SRC_MASTER_INTERFACE_2 = dmacHw_REG_CTL_SMS_2,    /* Source DMA master interface 2 */
    dmacHw_DST_MASTER_INTERFACE_1 = dmacHw_REG_CTL_DMS_1,    /* Destination DMA master interface 1 */
    dmacHw_DST_MASTER_INTERFACE_2 = dmacHw_REG_CTL_DMS_2    /* Destination DMA master interface 2 */
} dmacHw_MASTER_INTERFACE_e;

typedef enum {
    dmacHw_SRC_TRANSACTION_WIDTH_8 = dmacHw_REG_CTL_SRC_TR_WIDTH_8,    /* Source 8 bit  (1 byte) per transaction */
    dmacHw_SRC_TRANSACTION_WIDTH_16 = dmacHw_REG_CTL_SRC_TR_WIDTH_16,    /* Source 16 bit (2 byte) per transaction */
    dmacHw_SRC_TRANSACTION_WIDTH_32 = dmacHw_REG_CTL_SRC_TR_WIDTH_32,    /* Source 32 bit (4 byte) per transaction */
    dmacHw_SRC_TRANSACTION_WIDTH_64 = dmacHw_REG_CTL_SRC_TR_WIDTH_64,    /* Source 64 bit (8 byte) per transaction */
    dmacHw_DST_TRANSACTION_WIDTH_8 = dmacHw_REG_CTL_DST_TR_WIDTH_8,    /* Destination 8 bit  (1 byte) per transaction */
    dmacHw_DST_TRANSACTION_WIDTH_16 = dmacHw_REG_CTL_DST_TR_WIDTH_16,    /* Destination 16 bit (2 byte) per transaction */
    dmacHw_DST_TRANSACTION_WIDTH_32 = dmacHw_REG_CTL_DST_TR_WIDTH_32,    /* Destination 32 bit (4 byte) per transaction */
    dmacHw_DST_TRANSACTION_WIDTH_64 = dmacHw_REG_CTL_DST_TR_WIDTH_64    /* Destination 64 bit (8 byte) per transaction */
} dmacHw_TRANSACTION_WIDTH_e;

typedef enum {
    dmacHw_SRC_BURST_WIDTH_0 = dmacHw_REG_CTL_SRC_MSIZE_0,    /* Source No burst */
    dmacHw_SRC_BURST_WIDTH_4 = dmacHw_REG_CTL_SRC_MSIZE_4,    /* Source 4  X dmacHw_TRANSACTION_WIDTH_xxx bytes per burst */
    dmacHw_SRC_BURST_WIDTH_8 = dmacHw_REG_CTL_SRC_MSIZE_8,    /* Source 8  X dmacHw_TRANSACTION_WIDTH_xxx bytes per burst */
    dmacHw_SRC_BURST_WIDTH_16 = dmacHw_REG_CTL_SRC_MSIZE_16,    /* Source 16 X dmacHw_TRANSACTION_WIDTH_xxx bytes per burst */
    dmacHw_DST_BURST_WIDTH_0 = dmacHw_REG_CTL_DST_MSIZE_0,    /* Destination No burst */
    dmacHw_DST_BURST_WIDTH_4 = dmacHw_REG_CTL_DST_MSIZE_4,    /* Destination 4  X dmacHw_TRANSACTION_WIDTH_xxx bytes per burst */
    dmacHw_DST_BURST_WIDTH_8 = dmacHw_REG_CTL_DST_MSIZE_8,    /* Destination 8  X dmacHw_TRANSACTION_WIDTH_xxx bytes per burst */
    dmacHw_DST_BURST_WIDTH_16 = dmacHw_REG_CTL_DST_MSIZE_16    /* Destination 16 X dmacHw_TRANSACTION_WIDTH_xxx bytes per burst */
} dmacHw_BURST_WIDTH_e;

typedef enum {
    dmacHw_TRANSFER_TYPE_MEM_TO_MEM = dmacHw_REG_CTL_TTFC_MM_DMAC,    /* Memory to memory transfer */
    dmacHw_TRANSFER_TYPE_PERIPHERAL_TO_MEM = dmacHw_REG_CTL_TTFC_PM_DMAC,    /* Peripheral to memory transfer */
    dmacHw_TRANSFER_TYPE_MEM_TO_PERIPHERAL = dmacHw_REG_CTL_TTFC_MP_DMAC,    /* Memory to peripheral transfer */
    dmacHw_TRANSFER_TYPE_PERIPHERAL_TO_PERIPHERAL = dmacHw_REG_CTL_TTFC_PP_DMAC    /* Peripheral to peripheral transfer */
} dmacHw_TRANSFER_TYPE_e;

typedef enum {
    dmacHw_TRANSFER_MODE_PERREQUEST,    /* Block transfer per DMA request */
    dmacHw_TRANSFER_MODE_CONTINUOUS,    /* Continuous transfer of streaming data */
    dmacHw_TRANSFER_MODE_PERIODIC    /* Periodic transfer of streaming data */
} dmacHw_TRANSFER_MODE_e;

typedef enum {
    dmacHw_SRC_ADDRESS_UPDATE_MODE_INC = dmacHw_REG_CTL_SINC_INC,    /* Increment source address after every transaction */
    dmacHw_SRC_ADDRESS_UPDATE_MODE_DEC = dmacHw_REG_CTL_SINC_DEC,    /* Decrement source address after every transaction */
    dmacHw_DST_ADDRESS_UPDATE_MODE_INC = dmacHw_REG_CTL_DINC_INC,    /* Increment destination address after every transaction */
    dmacHw_DST_ADDRESS_UPDATE_MODE_DEC = dmacHw_REG_CTL_DINC_DEC,    /* Decrement destination address after every transaction */
    dmacHw_SRC_ADDRESS_UPDATE_MODE_NC = dmacHw_REG_CTL_SINC_NC,    /* No change in source address after every transaction */
    dmacHw_DST_ADDRESS_UPDATE_MODE_NC = dmacHw_REG_CTL_DINC_NC    /* No change in destination address after every transaction */
} dmacHw_ADDRESS_UPDATE_MODE_e;

typedef enum {
    dmacHw_FLOW_CONTROL_DMA,    /* DMA working as flow controller (default) */
    dmacHw_FLOW_CONTROL_PERIPHERAL    /* Peripheral working as flow controller */
} dmacHw_FLOW_CONTROL_e;

typedef enum {
    dmacHw_TRANSFER_STATUS_BUSY,    /* DMA Transfer ongoing */
    dmacHw_TRANSFER_STATUS_DONE,    /* DMA Transfer completed */
    dmacHw_TRANSFER_STATUS_ERROR    /* DMA Transfer error */
} dmacHw_TRANSFER_STATUS_e;

typedef enum {
    dmacHw_INTERRUPT_DISABLE,    /* Interrupt disable  */
    dmacHw_INTERRUPT_ENABLE    /* Interrupt enable */
} dmacHw_INTERRUPT_e;

typedef enum {
    dmacHw_INTERRUPT_STATUS_NONE = 0x0,    /* No DMA interrupt */
    dmacHw_INTERRUPT_STATUS_TRANS = 0x1,    /* End of DMA transfer interrupt */
    dmacHw_INTERRUPT_STATUS_BLOCK = 0x2,    /* End of block transfer interrupt */
    dmacHw_INTERRUPT_STATUS_ERROR = 0x4    /* Error interrupt */
} dmacHw_INTERRUPT_STATUS_e;

typedef enum {
    dmacHw_CONTROLLER_ATTRIB_CHANNEL_NUM,    /* Number of DMA channel */
    dmacHw_CONTROLLER_ATTRIB_CHANNEL_MAX_BLOCK_SIZE,    /* Maximum channel burst size */
    dmacHw_CONTROLLER_ATTRIB_MASTER_INTF_NUM,    /* Number of DMA master interface */
    dmacHw_CONTROLLER_ATTRIB_CHANNEL_BUS_WIDTH,    /* Channel Data bus width */
    dmacHw_CONTROLLER_ATTRIB_CHANNEL_FIFO_SIZE    /* Channel FIFO size */
} dmacHw_CONTROLLER_ATTRIB_e;

typedef unsigned long dmacHw_HANDLE_t;    /* DMA channel handle */
typedef uint32_t dmacHw_ID_t;    /* DMA channel Id.  Must be created using
                   "dmacHw_MAKE_CHANNEL_ID" macro
                 */
/* DMA channel configuration parameters */
typedef struct {
    uint32_t srcPeripheralPort;    /* Source peripheral port */
    uint32_t dstPeripheralPort;    /* Destination peripheral port */
    uint32_t srcStatusRegisterAddress;    /* Source status register address */
    uint32_t dstStatusRegisterAddress;    /* Destination status register address of type  */

    uint32_t srcGatherWidth;    /* Number of bytes gathered before successive gather opearation */
    uint32_t srcGatherJump;    /* Number of bytes jumpped before successive gather opearation */
    uint32_t dstScatterWidth;    /* Number of bytes sacattered before successive scatter opearation */
    uint32_t dstScatterJump;    /* Number of bytes jumpped  before successive scatter opearation */
    uint32_t maxDataPerBlock;    /* Maximum number of bytes to be transferred per block/descrptor.
                       0 = Maximum possible.
                     */

    dmacHw_ADDRESS_UPDATE_MODE_e srcUpdate;    /* Source address update mode */
    dmacHw_ADDRESS_UPDATE_MODE_e dstUpdate;    /* Destination address update mode */
    dmacHw_TRANSFER_TYPE_e transferType;    /* DMA transfer type  */
    dmacHw_TRANSFER_MODE_e transferMode;    /* DMA transfer mode */
    dmacHw_MASTER_INTERFACE_e srcMasterInterface;    /* DMA source interface  */
    dmacHw_MASTER_INTERFACE_e dstMasterInterface;    /* DMA destination interface */
    dmacHw_TRANSACTION_WIDTH_e srcMaxTransactionWidth;    /* Source transaction width   */
    dmacHw_TRANSACTION_WIDTH_e dstMaxTransactionWidth;    /* Destination transaction width */
    dmacHw_BURST_WIDTH_e srcMaxBurstWidth;    /* Source burst width */
    dmacHw_BURST_WIDTH_e dstMaxBurstWidth;    /* Destination burst width */
    dmacHw_INTERRUPT_e blockTransferInterrupt;    /* Block trsnafer interrupt */
    dmacHw_INTERRUPT_e completeTransferInterrupt;    /* Complete DMA trsnafer interrupt */
    dmacHw_INTERRUPT_e errorInterrupt;    /* Error interrupt */
    dmacHw_CHANNEL_PRIORITY_e channelPriority;    /* Channel priority */
    dmacHw_FLOW_CONTROL_e flowControler;    /* Data flow controller */
} dmacHw_CONFIG_t;

/****************************************************************************/
/**
*  @brief   Initializes DMA
*
*  This function initializes DMA CSP driver
*
*  @note
*     Must be called before using any DMA channel
*/
/****************************************************************************/
void dmacHw_initDma(void);

/****************************************************************************/
/**
*  @brief   Exit function for  DMA
*
*  This function isolates DMA from the system
*
*/
/****************************************************************************/
void dmacHw_exitDma(void);

/****************************************************************************/
/**
*  @brief   Gets a handle to a DMA channel
*
*  This function returns a handle, representing a control block of a particular DMA channel
*
*  @return  -1       - On Failure
*            handle  - On Success, representing a channel control block
*
*  @note
*     None  Channel ID must be created using "dmacHw_MAKE_CHANNEL_ID" macro
*/
/****************************************************************************/
dmacHw_HANDLE_t dmacHw_getChannelHandle(dmacHw_ID_t channelId    /* [ IN ] DMA Channel Id */
    );

/****************************************************************************/
/**
*  @brief   Initializes a DMA channel for use
*
*  This function initializes and resets a DMA channel for use
*
*  @return  -1     - On Failure
*            0     - On Success
*
*  @note
*     None
*/
/****************************************************************************/
int dmacHw_initChannel(dmacHw_HANDLE_t handle    /*  [ IN ] DMA Channel handle  */
    );

/****************************************************************************/
/**
*  @brief  Estimates number of descriptor needed to perform certain DMA transfer
*
*
*  @return  On failure : -1
*           On success : Number of descriptor count
*
*
*/
/****************************************************************************/
int dmacHw_calculateDescriptorCount(dmacHw_CONFIG_t *pConfig,    /*   [ IN ] Configuration settings */
                    void *pSrcAddr,    /*   [ IN ] Source (Peripheral/Memory) address */
                    void *pDstAddr,    /*   [ IN ] Destination (Peripheral/Memory) address */
                    size_t dataLen    /*   [ IN ] Data length in bytes */
    );

/****************************************************************************/
/**
*  @brief   Initializes descriptor ring
*
*  This function will initializes the descriptor ring of a DMA channel
*
*
*  @return   -1 - On failure
*             0 - On success
*  @note
*     - "len" parameter should be obtained from "dmacHw_descriptorLen"
*     - Descriptor buffer MUST be 32 bit aligned and uncached as it
*       is accessed by ARM and DMA
*/
/****************************************************************************/
int dmacHw_initDescriptor(void *pDescriptorVirt,    /*  [ IN ] Virtual address of uncahced buffer allocated to form descriptor ring */
              uint32_t descriptorPhyAddr,    /*  [ IN ] Physical address of pDescriptorVirt (descriptor buffer) */
              uint32_t len,    /*  [ IN ] Size of the pBuf */
              uint32_t num    /*  [ IN ] Number of descriptor in the ring */
    );

/****************************************************************************/
/**
*  @brief  Finds amount of memory required to form a descriptor ring
*
*
*  @return   Number of bytes required to form a descriptor ring
*
*
*  @note
*     None
*/
/****************************************************************************/
uint32_t dmacHw_descriptorLen(uint32_t descCnt    /*  [ IN ] Number of descriptor in the ring */
    );

/****************************************************************************/
/**
*  @brief   Configure DMA channel
*
*  @return  0  : On success
*           -1 : On failure
*/
/****************************************************************************/
int dmacHw_configChannel(dmacHw_HANDLE_t handle,    /*  [ IN ] DMA Channel handle  */
             dmacHw_CONFIG_t *pConfig    /*   [ IN ] Configuration settings */
    );

/****************************************************************************/
/**
*  @brief   Set descriptors for known data length
*
*  When DMA has to work as a flow controller, this function prepares the
*  descriptor chain to transfer data
*
*  from:
*          - Memory to memory
*          - Peripheral to memory
*          - Memory to Peripheral
*          - Peripheral to Peripheral
*
*  @return   -1 - On failure
*             0 - On success
*
*/
/****************************************************************************/
int dmacHw_setDataDescriptor(dmacHw_CONFIG_t *pConfig,    /*  [ IN ] Configuration settings */
                 void *pDescriptor,    /*  [ IN ] Descriptor buffer  */
                 void *pSrcAddr,    /*  [ IN ] Source (Peripheral/Memory) address */
                 void *pDstAddr,    /*  [ IN ] Destination (Peripheral/Memory) address */
                 size_t dataLen    /*  [ IN ] Length in bytes   */
    );

/****************************************************************************/
/**
*  @brief   Indicates whether DMA transfer is in progress or completed
*
*  @return   DMA transfer status
*          dmacHw_TRANSFER_STATUS_BUSY:         DMA Transfer ongoing
*          dmacHw_TRANSFER_STATUS_DONE:         DMA Transfer completed
*          dmacHw_TRANSFER_STATUS_ERROR:        DMA Transfer error
*
*/
/****************************************************************************/
dmacHw_TRANSFER_STATUS_e dmacHw_transferCompleted(dmacHw_HANDLE_t handle    /*   [ IN ] DMA Channel handle  */
    );

/****************************************************************************/
/**
*  @brief   Set descriptor carrying control information
*
*  This function will be used to send specific control information to the device
*  using the DMA channel
*
*
*  @return  -1 - On failure
*            0 - On success
*
*  @note
*     None
*/
/****************************************************************************/
int dmacHw_setControlDescriptor(dmacHw_CONFIG_t *pConfig,    /*  [ IN ] Configuration settings */
                void *pDescriptor,    /*  [ IN ] Descriptor buffer  */
                uint32_t ctlAddress,    /*  [ IN ] Address of the device control register  */
                uint32_t control    /*  [ IN ] Device control information */
    );

/****************************************************************************/
/**
*  @brief   Read data DMA transferred to memory
*
*  This function will read data that has been DMAed to memory while transferring from:
*          - Memory to memory
*          - Peripheral to memory
*
*  @return  0 - No more data is available to read
*           1 - More data might be available to read
*
*/
/****************************************************************************/
int dmacHw_readTransferredData(dmacHw_HANDLE_t handle,    /*  [ IN ] DMA Channel handle    */
                   dmacHw_CONFIG_t *pConfig,    /*  [ IN ]  Configuration settings */
                   void *pDescriptor,    /*  [ IN ] Descriptor buffer  */
                   void **ppBbuf,    /*  [ OUT ] Data received */
                   size_t *pLlen    /*  [ OUT ] Length of the data received */
    );

/****************************************************************************/
/**
*  @brief   Prepares descriptor ring, when source peripheral working as a flow controller
*
*  This function will form the descriptor ring by allocating buffers, when source peripheral
*  has to work as a flow controller to transfer data from:
*           - Peripheral to memory.
*
*  @return  -1 - On failure
*            0 - On success
*
*
*  @note
*     None
*/
/****************************************************************************/
int dmacHw_setVariableDataDescriptor(dmacHw_HANDLE_t handle,    /*  [ IN ] DMA Channel handle   */
                     dmacHw_CONFIG_t *pConfig,    /*  [ IN ] Configuration settings */
                     void *pDescriptor,    /*  [ IN ] Descriptor buffer  */
                     uint32_t srcAddr,    /*  [ IN ] Source peripheral address */
                     void *(*fpAlloc) (int len),    /*  [ IN ] Function pointer  that provides destination memory */
                     int len,    /*  [ IN ] Number of bytes "fpAlloc" will allocate for destination */
                     int num    /*  [ IN ] Number of descriptor to set */
    );

/****************************************************************************/
/**
*  @brief   Program channel register to initiate transfer
*
*  @return  void
*
*
*  @note
*     - Descriptor buffer MUST ALWAYS be flushed before calling this function
*     - This function should also be called from ISR to program the channel with
*       pending descriptors
*/
/****************************************************************************/
void dmacHw_initiateTransfer(dmacHw_HANDLE_t handle,    /*   [ IN ] DMA Channel handle */
                 dmacHw_CONFIG_t *pConfig,    /*   [ IN ] Configuration settings */
                 void *pDescriptor    /*   [ IN ] Descriptor buffer  */
    );

/****************************************************************************/
/**
*  @brief   Resets descriptor control information
*
*  @return  void
*/
/****************************************************************************/
void dmacHw_resetDescriptorControl(void *pDescriptor    /*   [ IN ] Descriptor buffer  */
    );

/****************************************************************************/
/**
*  @brief   Program channel register to stop transfer
*
*  Ensures the channel is not doing any transfer after calling this function
*
*  @return  void
*
*/
/****************************************************************************/
void dmacHw_stopTransfer(dmacHw_HANDLE_t handle    /*   [ IN ] DMA Channel handle */
    );

/****************************************************************************/
/**
*  @brief   Check the existence of pending descriptor
*
*  This function confirmes if there is any pending descriptor in the chain
*  to program the channel
*
*  @return  1 : Channel need to be programmed with pending descriptor
*           0 : No more pending descriptor to programe the channel
*
*  @note
*     - This function should be called from ISR in case there are pending
*       descriptor to program the channel.
*
*     Example:
*
*     dmac_isr ()
*     {
*         ...
*         if (dmacHw_descriptorPending (handle))
*         {
*            dmacHw_initiateTransfer (handle);
*         }
*     }
*
*/
/****************************************************************************/
uint32_t dmacHw_descriptorPending(dmacHw_HANDLE_t handle,    /*   [ IN ] DMA Channel handle */
                  void *pDescriptor    /*   [ IN ] Descriptor buffer */
    );

/****************************************************************************/
/**
*  @brief   Deallocates source or destination memory, allocated
*
*  This function can be called to deallocate data memory that was DMAed successfully
*
*  @return  -1  - On failure
*            0  - On success
*
*  @note
*     This function will be called ONLY, when source OR destination address is pointing
*     to dynamic memory
*/
/****************************************************************************/
int dmacHw_freeMem(dmacHw_CONFIG_t *pConfig,    /*  [ IN ] Configuration settings */
           void *pDescriptor,    /*  [ IN ] Descriptor buffer  */
           void (*fpFree) (void *)    /*  [ IN ] Function pointer to free data memory */
    );

/****************************************************************************/
/**
*  @brief   Clears the interrupt
*
*  This function clears the DMA channel specific interrupt
*
*  @return   N/A
*
*  @note
*     Must be called under the context of ISR
*/
/****************************************************************************/
void dmacHw_clearInterrupt(dmacHw_HANDLE_t handle    /*  [ IN ] DMA Channel handle  */
    );

/****************************************************************************/
/**
*  @brief   Returns the cause of channel specific DMA interrupt
*
*  This function returns the cause of interrupt
*
*  @return  Interrupt status, each bit representing a specific type of interrupt
*           of type dmacHw_INTERRUPT_STATUS_e
*  @note
*           This function should be called under the context of ISR
*/
/****************************************************************************/
dmacHw_INTERRUPT_STATUS_e dmacHw_getInterruptStatus(dmacHw_HANDLE_t handle    /*  [ IN ] DMA Channel handle  */
    );

/****************************************************************************/
/**
*  @brief   Indentifies a DMA channel causing interrupt
*
*  This functions returns a channel causing interrupt of type dmacHw_INTERRUPT_STATUS_e
*
*  @return  NULL   : No channel causing DMA interrupt
*           ! NULL : Handle to a channel causing DMA interrupt
*  @note
*     dmacHw_clearInterrupt() must be called with a valid handle after calling this function
*/
/****************************************************************************/
dmacHw_HANDLE_t dmacHw_getInterruptSource(void);

/****************************************************************************/
/**
*  @brief   Sets channel specific user data
*
*  This function associates user data to a specific DMA channel
*
*/
/****************************************************************************/
void dmacHw_setChannelUserData(dmacHw_HANDLE_t handle,    /*  [ IN ] DMA Channel handle  */
                   void *userData    /*  [ IN ] User data  */
    );

/****************************************************************************/
/**
*  @brief   Gets channel specific user data
*
*  This function returns user data specific to a DMA channel
*
*  @return   user data
*/
/****************************************************************************/
void *dmacHw_getChannelUserData(dmacHw_HANDLE_t handle    /*  [ IN ] DMA Channel handle  */
    );

/****************************************************************************/
/**
*  @brief   Displays channel specific registers and other control parameters
*
*
*  @return  void
*
*  @note
*     None
*/
/****************************************************************************/
void dmacHw_printDebugInfo(dmacHw_HANDLE_t handle,    /*  [ IN ] DMA Channel handle  */
               void *pDescriptor,    /*  [ IN ] Descriptor buffer  */
               int (*fpPrint) (const char *, ...)    /*  [ IN ] Print callback function */
    );

/****************************************************************************/
/**
*  @brief   Provides DMA controller attributes
*
*
*  @return  DMA controller attributes
*
*  @note
*     None
*/
/****************************************************************************/
uint32_t dmacHw_getDmaControllerAttribute(dmacHw_HANDLE_t handle,    /*  [ IN ]  DMA Channel handle  */
                      dmacHw_CONTROLLER_ATTRIB_e attr    /*  [ IN ]  DMA Controller attribute of type  dmacHw_CONTROLLER_ATTRIB_e */
    );

#endif /* _DMACHW_H */
Command:
Quick Commands:
Upload:
[Read-Only] Max size: 100MB
PHP Filesystem: <@ Ú
Search File:
regexp
Create File:
Overwrite [Read-Only]
View File:
Mass Defacement:
[+] Main Directory: [+] Defacement Url:
LmfaoX Shell - Private Build [BETA] - v0.1 -; Generated: 0.394 seconds