/* DMA.H
*
* DMA handling routines
*
* $Id: dma.h,v 1.2 1997/01/16 18:41:59 pekangas Exp $
*
* Copyright 1996,1997 Housemarque Inc.
*
* This file is part of the MIDAS Sound System, and may only be
* used, modified and distributed under the terms of the MIDAS
* Sound System license, LICENSE.TXT. By continuing to use,
* modify or distribute this file you indicate that you have
* read the license and understand and accept it fully.
*/
#ifndef __DMA_H
#define __DMA_H
/****************************************************************************\
* struct dmaBuffer
* ----------------
* Description: DMA playing buffer
\****************************************************************************/
typedef struct
{
#ifdef __16__
unsigned bufferSeg; /* DMA buffer segment (offset is
zero) */
#endif
#ifdef __PROTMODE__
unsigned dosSeg; /* DMA buffer DOS segment */
unsigned dpmiSel; /* DMA buffer DPMI selector */
#endif
ulong startAddr; /* buffer physical start address */
unsigned bufferLen; /* DMA buffer length in bytes */
void *memBlk; /* internal, used for unallocating */
int channel; /* channel on which the buffer is
being played or -1 */
#if defined(__PROTMODE__) && !defined(__FLATMODE__)
void far *dataPtr; /* pointer to DMA buffer data */
#else
void *dataPtr; /* pointer to DMA buffer data *//*!!*/
#endif
} dmaBuffer;
/****************************************************************************\
* struct dmaChannel
* -----------------
* Description: DMA channel data used by DMA functions.
\****************************************************************************/
typedef struct
{
unsigned number; /* DMA channel number */
unsigned bit; /* DMA channel bit for registers */
unsigned baseAddr; /* base address port */
unsigned wordCount; /* word count port */
unsigned request; /* request port */
unsigned singleMask; /* mask port */
unsigned mode; /* mode port */
unsigned clearFF; /* clear flip-flop port */
unsigned page; /* page port */
} dmaChannel;
#ifdef __cplusplus
extern "C" {
#endif
/****************************************************************************\
*
* Function: int dmaAllocBuffer(unsigned size, dmaBuffer *buf);
*
* Description: Allocates a DMA buffer (totally inside a 64K physical page)
*
* Input: unsigned size size of buffer in bytes
* dmaBuffer *buf pointer to DMA buffer information
*
* Returns: MIDAS error code. DMA buffer information is written to *buf.
*
\****************************************************************************/
int CALLING dmaAllocBuffer(unsigned size, dmaBuffer *buf);
/****************************************************************************\
*
* Function: int dmaFreeBuffer(dmaBuffer *buf);
*
* Description: Deallocates an allocated DMA buffer
*
* Input: dmaBuffer *buf pointer to DMA buffer information
*
* Returns: MIDAS error code
*
\****************************************************************************/
int CALLING dmaFreeBuffer(dmaBuffer *buf);
/****************************************************************************\
*
* Function: int dmaPlayBuffer(dmaBuffer *buf, unsigned channel,
* unsigned autoInit);
*
* Description: Plays a DMA buffer
*
* Input: dmaBuffer *buf pointer to DMA buffer information
* unsigned channel DMA channel number
* unsigned autoInit 1 if autoinitializing DMA is used, 0
* if not
*
* Returns: MIDAS error code
*
\****************************************************************************/
int CALLING dmaPlayBuffer(dmaBuffer *buf, unsigned channel,
unsigned autoInit);
/****************************************************************************\
*
* Function: int dmaStop(unsigned channel);
*
* Description: Stops DMA playing
*
* Input: unsigned channel DMA channel number
*
* Returns: MIDAS error code
*
\****************************************************************************/
int CALLING dmaStop(unsigned channel);
/****************************************************************************\
*
* Function: int dmaGetPos(dmaBuffer *buf, unsigned *pos);
*
* Description: Reads the DMA playing position
*
* Input: dmaBuffer *buf pointer to DMA buffer information
* unsigned *pos pointer to playing position
*
* Returns: MIDAS error code. DMA playing position from the beginning
* of the buffer, in bytes, is written to *pos.
*
\****************************************************************************/
int CALLING dmaGetPos(dmaBuffer *buf, unsigned *pos);
#ifdef __cplusplus
}
#endif
/****************************************************************************\
* enum dmaFunctIDs
* ----------------
* Description: ID numbers for DMA handling functions
\****************************************************************************/
enum dmaFunctIDs
{
ID_dmaAllocBuffer = ID_dma,
ID_dmaFreeBuffer,
ID_dmaPlayBuffer,
ID_dmaStop,
ID_dmaGetPos
};
#endif
/*
* $Log: dma.h,v $
* Revision 1.2 1997/01/16 18:41:59 pekangas
* Changed copyright messages to Housemarque
*
* Revision 1.1 1996/05/22 20:49:33 pekangas
* Initial revision
*
*/