home *** CD-ROM | disk | FTP | other *** search
- #ifndef dma_H
- #define dma_H
-
- /* C header file for DMA
- * written by DefMod (Sep 7 1994) on Wed Sep 7 21:24:49 1994
- * Copyright © Acorn Computers Ltd, 1994
- */
-
- /*************************************************************************
- * This source file was written by Acorn Computers Limited. It is part *
- * of the OSLib library for writing applications for RISC OS. It may be *
- * used freely in the creation of programs for RISC OS. *
- *************************************************************************/
-
- #ifndef types_H
- #include "types.h"
- #endif
-
- #ifndef os_H
- #include "os.h"
- #endif
-
- /**********************************
- * SWI names and SWI reason codes *
- **********************************/
- #undef DMA_RegisterChannel
- #define DMA_RegisterChannel 0x46140
- #undef XDMA_RegisterChannel
- #define XDMA_RegisterChannel 0x66140
- #undef DMA_DeregisterChannel
- #define DMA_DeregisterChannel 0x46141
- #undef XDMA_DeregisterChannel
- #define XDMA_DeregisterChannel 0x66141
- #undef DMA_QueueTransfer
- #define DMA_QueueTransfer 0x46142
- #undef XDMA_QueueTransfer
- #define XDMA_QueueTransfer 0x66142
- #undef DMA_TerminateTransfer
- #define DMA_TerminateTransfer 0x46143
- #undef XDMA_TerminateTransfer
- #define XDMA_TerminateTransfer 0x66143
- #undef DMA_SuspendTransfer
- #define DMA_SuspendTransfer 0x46144
- #undef XDMA_SuspendTransfer
- #define XDMA_SuspendTransfer 0x66144
- #undef DMA_ResumeTransfer
- #define DMA_ResumeTransfer 0x46145
- #undef XDMA_ResumeTransfer
- #define XDMA_ResumeTransfer 0x66145
- #undef DMA_ExamineTransfer
- #define DMA_ExamineTransfer 0x46146
- #undef XDMA_ExamineTransfer
- #define XDMA_ExamineTransfer 0x66146
-
- /************************************
- * Structure and union declarations *
- ************************************/
- typedef struct dma_c_ *dma_c;
- typedef struct dma_tag_ *dma_tag;
- typedef struct dma_routines dma_routines;
- typedef struct dma_scatter dma_scatter;
- typedef struct dma_scatter_list dma_scatter_list;
-
- /********************
- * Type definitions *
- ********************/
- struct dma_routines
- { void *enable;
- void *disable;
- void *start;
- void *completed;
- void *sync;
- };
-
- struct dma_scatter
- { byte *address;
- int size;
- };
-
- struct dma_scatter_list
- { dma_scatter s [UNKNOWN];
- };
-
- #define dma_SCATTER_LIST(N) \
- struct \
- { dma_scatter s [N]; \
- }
-
- #define dma_SIZEOF_SCATTER_LIST(N) \
- ((N)*sizeof ((dma_scatter_list *) NULL)->s)
-
- /************************
- * Constant definitions *
- ************************/
- #define dma_QUEUE_WRITE 0x1u
- #define dma_QUEUE_CIRCULAR_LIST 0x2u
- #define dma_QUEUE_USE_SYNC 0x4u
- #define dma_SUSPEND_START_NEXT 0x1u
-
- /*************************
- * Function declarations *
- *************************/
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- /*************************************************************
- * NOTE: The following functions provide direct access to *
- * the SWI's noted in the function description. *
- * Please read the relevant PRM section for more *
- * information on their input/output parameters. *
- *************************************************************/
-
- /* ------------------------------------------------------------------------
- * Function: dma_register_channel()
- *
- * Description: Registers a client device as the controller of a logical
- * channel
- *
- * Input: flags - value of R0 on entry
- * log_channel - value of R1 on entry
- * cycle_speed - value of R2 on entry
- * transfer_size - value of R3 on entry
- * control_routines - value of R4 on entry
- * workspace - value of R5 on entry
- *
- * Output: channel - value of R0 on exit (X version only)
- *
- * Returns: R0 (non-X version only)
- *
- * Other notes: Calls SWI 0x46140.
- */
-
- extern os_error *xdma_register_channel (bits flags,
- int log_channel,
- int cycle_speed,
- int transfer_size,
- dma_routines *control_routines,
- void *workspace,
- dma_c *channel);
- extern dma_c dma_register_channel (bits flags,
- int log_channel,
- int cycle_speed,
- int transfer_size,
- dma_routines *control_routines,
- void *workspace);
-
- /* ------------------------------------------------------------------------
- * Function: dma_deregister_channel()
- *
- * Description: Deregisters a client device previously registered by
- * DMA_RegisterChannel
- *
- * Input: channel - value of R0 on entry
- *
- * Other notes: Calls SWI 0x46141.
- */
-
- extern os_error *xdma_deregister_channel (dma_c channel);
- extern void dma_deregister_channel (dma_c channel);
-
- /* ------------------------------------------------------------------------
- * Function: dma_queue_transfer()
- *
- * Description: Queues a DMA transfer request for a logical channel
- *
- * Input: flags - value of R0 on entry
- * channel - value of R1 on entry
- * workspace - value of R2 on entry
- * scatter_list - value of R3 on entry
- * transfer_size - value of R4 on entry
- * buffer_size - value of R5 on entry
- * sync_size - value of R6 on entry
- *
- * Output: tag - value of R0 on exit (X version only)
- *
- * Returns: R0 (non-X version only)
- *
- * Other notes: Calls SWI 0x46142.
- */
-
- extern os_error *xdma_queue_transfer (bits flags,
- dma_c channel,
- void *workspace,
- dma_scatter_list *scatter_list,
- int transfer_size,
- int buffer_size,
- int sync_size,
- dma_tag *tag);
- extern dma_tag dma_queue_transfer (bits flags,
- dma_c channel,
- void *workspace,
- dma_scatter_list *scatter_list,
- int transfer_size,
- int buffer_size,
- int sync_size);
-
- /* ------------------------------------------------------------------------
- * Function: dma_terminate_transfer()
- *
- * Description: Terminates a DMA transfer
- *
- * Input: error - value of R0 on entry
- * tag - value of R1 on entry
- *
- * Other notes: Calls SWI 0x46143.
- */
-
- extern os_error *xdma_terminate_transfer (os_error *error,
- dma_tag tag);
- extern void dma_terminate_transfer (os_error *error,
- dma_tag tag);
-
- /* ------------------------------------------------------------------------
- * Function: dma_suspend_transfer()
- *
- * Description: Suspends a DMA transfer
- *
- * Input: flags - value of R0 on entry
- * tag - value of R1 on entry
- *
- * Other notes: Calls SWI 0x46144.
- */
-
- extern os_error *xdma_suspend_transfer (bits flags,
- dma_tag tag);
- extern void dma_suspend_transfer (bits flags,
- dma_tag tag);
-
- /* ------------------------------------------------------------------------
- * Function: dma_resume_transfer()
- *
- * Description: Resumes a previously suspended DMA transfer
- *
- * Input: flags - value of R0 on entry
- * tag - value of R1 on entry
- *
- * Other notes: Calls SWI 0x46145.
- */
-
- extern os_error *xdma_resume_transfer (bits flags,
- dma_tag tag);
- extern void dma_resume_transfer (bits flags,
- dma_tag tag);
-
- /* ------------------------------------------------------------------------
- * Function: dma_examine_transfer()
- *
- * Description: Returns the progress of a DMA transfer
- *
- * Input: flags - value of R0 on entry
- * tag - value of R1 on entry
- *
- * Output: transferred_size - value of R0 on exit
- *
- * Other notes: Calls SWI 0x46146.
- */
-
- extern os_error *xdma_examine_transfer (bits flags,
- dma_tag tag,
- int *transferred_size);
- extern void dma_examine_transfer (bits flags,
- dma_tag tag,
- int *transferred_size);
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif
-