#ifndef MDMA_H
#define MDMA_H

#include "mtypes.h"

#define READ_DMA                0
#define WRITE_DMA               1
#define INDEF_READ              2
#define INDEF_WRITE             3

#ifdef __WATCOMC__

typedef struct {
    void *continuous;		/* the pointer to a page-continous dma buffer */
    UWORD raw_selector;		/* the raw allocated dma selector */
} DMAMEM;

#elif defined(__DJGPP__)

typedef struct {
    void *continuous;		/* the pointer to a page-continous dma buffer */
    _go32_dpmi_seginfo raw;	/* points to the memory that was allocated */
} DMAMEM;

#else

typedef struct {
    void *continuous;		/* the pointer to a page-continous dma buffer */
    void *raw;			/* points to the memory that was allocated */
} DMAMEM;

#endif

DMAMEM *MDma_AllocMem(UWORD size);
void MDma_FreeMem(DMAMEM * dm);
int MDma_Start(int channel, DMAMEM * dm, UWORD size, int type);
void MDma_Stop(int channel);
void *MDma_GetPtr(DMAMEM * dm);
void MDma_Commit(DMAMEM * dm, UWORD index, UWORD count);
UWORD MDma_Todo(int channel);

#endif
