#ifndef DMA_EXPORT_H
#define DMA_EXPORT_H

/****************************************************
 * $Id:
 *
 * Copyright Motorola 1999
 *
 * $Log:
 *
 ****************************************************/

/* These are the defined return values for the DMA_* functions.
 * Any non-zero value indicates failure.  Failure modes can be added for
 * more detailed error reporting.
 */
typedef enum _dma_status
{
 DMA_SUCCESS     = 0,
 DMA_ERROR,
} DMA_Status;

/* These are the defined channel transfer types.  */
typedef enum _dma_transfer_types
{
	DMA_M2M =  0,	/* local memory to local memory */
	DMA_M2P =  1,	/* local memory to PCI */
	DMA_P2M =  2,	/* PCI to local memory */
	DMA_P2P =  3,	/* PCI to PCI */
} DMA_TRANSFER_TYPE;

typedef enum _dma_interrupt_steer
{
	DMA_INT_STEER_LOCAL =  0, /* steer DMA int to local processor */
	DMA_INT_STEER_PCI = 1,    /* steer DMA int to PCI bus through INTA_ */
} DMA_INTERRUPT_STEER;

typedef enum _dma_channel
{
	DMA_CHN_0 =  0, /* kahlua has two dma channels: 0 and 1 */
	DMA_CHN_1 =  1,
} DMA_CHANNEL;

typedef enum _dma_snoop_mode
{
	DMA_SNOOP_DISABLE =  0,
	DMA_SNOOP_ENABLE = 1,
} DMA_SNOOP_MODE;

/******************** App. API ********************
 * The application API is for user level application
 * to use the functionality provided by DMA driver.
 * This is a "generic" DMA interface, it should contain
 * nothing specific to the Kahlua implementation.
 * Only the generic functions are exported by the library.
 *
 * Note: Its App.s responsibility to swap the data
 *       byte. In our API, we currently transfer whatever
 *       we are given - Big/Little Endian.  This could
 *       become part of the DMA config, though.
 **************************************************/


/*  Initialize DMA unit with the following:
 *  optional pointer to application layer print function
 *
 *  These parameters may be added:
 *  ???
 *  Interrupt enables, modes, etc. are set for each transfer.
 *
 *  This function must be called before DMA unit can be used.
 */
extern DMA_Status DMA_Initialize(
        int (*app_print_function)(char *,...)); /* pointer to optional "printf"
                                                 * provided by application
                                                 */

/* Perform the DMA transfer, only direct mode is currently implemented.
 * At this point, I think it would be better to define a different
 * function for chaining mode.
 * Also, I'm not sure if it is appropriate to have the "generic" API
 * accept snoop and int_steer parameters.  The DINK user interface allows
 * them, so for now I'll leave them.
 *
 * int_steer controls DMA interrupt steering to PCI or local processor
 * type is the type of transfer: M2M, M2P, P2M, P2P
 * source is the source address of the data
 * dest is the destination address of the data
 * len is the length of data to transfer
 * channel is the DMA channel to use for the transfer
 * snoop is the snoop enable control
 */
extern DMA_Status DMA_direct_transfer( DMA_INTERRUPT_STEER int_steer,
                                       DMA_TRANSFER_TYPE type,
                                       unsigned int source,
                                       unsigned int dest,
                                       unsigned int len,
                                       DMA_CHANNEL channel,
                                       DMA_SNOOP_MODE snoop);
#endif
