home *** CD-ROM | disk | FTP | other *** search
/ RISC DISC 1 / RISC_DISC_1.iso / pd_share / code / oslib / h / dma < prev    next >
Encoding:
Text File  |  1994-09-07  |  8.1 KB  |  272 lines

  1. #ifndef dma_H
  2. #define dma_H
  3.  
  4. /* C header file for DMA
  5.  * written by DefMod (Sep  7 1994) on Wed Sep  7 21:24:49 1994
  6.  * Copyright © Acorn Computers Ltd, 1994
  7.  */
  8.  
  9. /*************************************************************************
  10.  * This source file was written by Acorn Computers Limited. It is part   *
  11.  * of the OSLib library for writing applications for RISC OS. It may be  *
  12.  * used freely in the creation of programs for RISC OS.                  *
  13.  *************************************************************************/
  14.  
  15. #ifndef types_H
  16.    #include "types.h"
  17. #endif
  18.  
  19. #ifndef os_H
  20.    #include "os.h"
  21. #endif
  22.  
  23. /**********************************
  24.  * SWI names and SWI reason codes *
  25.  **********************************/
  26. #undef  DMA_RegisterChannel
  27. #define DMA_RegisterChannel                     0x46140
  28. #undef  XDMA_RegisterChannel
  29. #define XDMA_RegisterChannel                    0x66140
  30. #undef  DMA_DeregisterChannel
  31. #define DMA_DeregisterChannel                   0x46141
  32. #undef  XDMA_DeregisterChannel
  33. #define XDMA_DeregisterChannel                  0x66141
  34. #undef  DMA_QueueTransfer
  35. #define DMA_QueueTransfer                       0x46142
  36. #undef  XDMA_QueueTransfer
  37. #define XDMA_QueueTransfer                      0x66142
  38. #undef  DMA_TerminateTransfer
  39. #define DMA_TerminateTransfer                   0x46143
  40. #undef  XDMA_TerminateTransfer
  41. #define XDMA_TerminateTransfer                  0x66143
  42. #undef  DMA_SuspendTransfer
  43. #define DMA_SuspendTransfer                     0x46144
  44. #undef  XDMA_SuspendTransfer
  45. #define XDMA_SuspendTransfer                    0x66144
  46. #undef  DMA_ResumeTransfer
  47. #define DMA_ResumeTransfer                      0x46145
  48. #undef  XDMA_ResumeTransfer
  49. #define XDMA_ResumeTransfer                     0x66145
  50. #undef  DMA_ExamineTransfer
  51. #define DMA_ExamineTransfer                     0x46146
  52. #undef  XDMA_ExamineTransfer
  53. #define XDMA_ExamineTransfer                    0x66146
  54.  
  55. /************************************
  56.  * Structure and union declarations *
  57.  ************************************/
  58. typedef struct dma_c_                           *dma_c;
  59. typedef struct dma_tag_                         *dma_tag;
  60. typedef struct dma_routines                     dma_routines;
  61. typedef struct dma_scatter                      dma_scatter;
  62. typedef struct dma_scatter_list                 dma_scatter_list;
  63.  
  64. /********************
  65.  * Type definitions *
  66.  ********************/
  67. struct dma_routines
  68.    {  void *enable;
  69.       void *disable;
  70.       void *start;
  71.       void *completed;
  72.       void *sync;
  73.    };
  74.  
  75. struct dma_scatter
  76.    {  byte *address;
  77.       int size;
  78.    };
  79.  
  80. struct dma_scatter_list
  81.    {  dma_scatter s [UNKNOWN];
  82.    };
  83.  
  84. #define dma_SCATTER_LIST(N) \
  85.    struct \
  86.       {  dma_scatter s [N]; \
  87.       }
  88.  
  89. #define dma_SIZEOF_SCATTER_LIST(N) \
  90.    ((N)*sizeof ((dma_scatter_list *) NULL)->s)
  91.  
  92. /************************
  93.  * Constant definitions *
  94.  ************************/
  95. #define dma_QUEUE_WRITE                         0x1u
  96. #define dma_QUEUE_CIRCULAR_LIST                 0x2u
  97. #define dma_QUEUE_USE_SYNC                      0x4u
  98. #define dma_SUSPEND_START_NEXT                  0x1u
  99.  
  100. /*************************
  101.  * Function declarations *
  102.  *************************/
  103.  
  104. #ifdef __cplusplus
  105.    extern "C" {
  106. #endif
  107.  
  108. /*************************************************************
  109.  * NOTE: The following functions provide direct access to    *
  110.  *       the SWI's noted in the function description.        *
  111.  *       Please read the relevant PRM section for more       *
  112.  *       information on their input/output parameters.       *
  113.  *************************************************************/
  114.  
  115. /* ------------------------------------------------------------------------
  116.  * Function:      dma_register_channel()
  117.  *
  118.  * Description:   Registers a client device as the controller of a logical
  119.  *                channel
  120.  *
  121.  * Input:         flags - value of R0 on entry
  122.  *                log_channel - value of R1 on entry
  123.  *                cycle_speed - value of R2 on entry
  124.  *                transfer_size - value of R3 on entry
  125.  *                control_routines - value of R4 on entry
  126.  *                workspace - value of R5 on entry
  127.  *
  128.  * Output:        channel - value of R0 on exit (X version only)
  129.  *
  130.  * Returns:       R0 (non-X version only)
  131.  *
  132.  * Other notes:   Calls SWI 0x46140.
  133.  */
  134.  
  135. extern os_error *xdma_register_channel (bits flags,
  136.       int log_channel,
  137.       int cycle_speed,
  138.       int transfer_size,
  139.       dma_routines *control_routines,
  140.       void *workspace,
  141.       dma_c *channel);
  142. extern dma_c dma_register_channel (bits flags,
  143.       int log_channel,
  144.       int cycle_speed,
  145.       int transfer_size,
  146.       dma_routines *control_routines,
  147.       void *workspace);
  148.  
  149. /* ------------------------------------------------------------------------
  150.  * Function:      dma_deregister_channel()
  151.  *
  152.  * Description:   Deregisters a client device previously registered by
  153.  *                DMA_RegisterChannel
  154.  *
  155.  * Input:         channel - value of R0 on entry
  156.  *
  157.  * Other notes:   Calls SWI 0x46141.
  158.  */
  159.  
  160. extern os_error *xdma_deregister_channel (dma_c channel);
  161. extern void dma_deregister_channel (dma_c channel);
  162.  
  163. /* ------------------------------------------------------------------------
  164.  * Function:      dma_queue_transfer()
  165.  *
  166.  * Description:   Queues a DMA transfer request for a logical channel
  167.  *
  168.  * Input:         flags - value of R0 on entry
  169.  *                channel - value of R1 on entry
  170.  *                workspace - value of R2 on entry
  171.  *                scatter_list - value of R3 on entry
  172.  *                transfer_size - value of R4 on entry
  173.  *                buffer_size - value of R5 on entry
  174.  *                sync_size - value of R6 on entry
  175.  *
  176.  * Output:        tag - value of R0 on exit (X version only)
  177.  *
  178.  * Returns:       R0 (non-X version only)
  179.  *
  180.  * Other notes:   Calls SWI 0x46142.
  181.  */
  182.  
  183. extern os_error *xdma_queue_transfer (bits flags,
  184.       dma_c channel,
  185.       void *workspace,
  186.       dma_scatter_list *scatter_list,
  187.       int transfer_size,
  188.       int buffer_size,
  189.       int sync_size,
  190.       dma_tag *tag);
  191. extern dma_tag dma_queue_transfer (bits flags,
  192.       dma_c channel,
  193.       void *workspace,
  194.       dma_scatter_list *scatter_list,
  195.       int transfer_size,
  196.       int buffer_size,
  197.       int sync_size);
  198.  
  199. /* ------------------------------------------------------------------------
  200.  * Function:      dma_terminate_transfer()
  201.  *
  202.  * Description:   Terminates a DMA transfer
  203.  *
  204.  * Input:         error - value of R0 on entry
  205.  *                tag - value of R1 on entry
  206.  *
  207.  * Other notes:   Calls SWI 0x46143.
  208.  */
  209.  
  210. extern os_error *xdma_terminate_transfer (os_error *error,
  211.       dma_tag tag);
  212. extern void dma_terminate_transfer (os_error *error,
  213.       dma_tag tag);
  214.  
  215. /* ------------------------------------------------------------------------
  216.  * Function:      dma_suspend_transfer()
  217.  *
  218.  * Description:   Suspends a DMA transfer
  219.  *
  220.  * Input:         flags - value of R0 on entry
  221.  *                tag - value of R1 on entry
  222.  *
  223.  * Other notes:   Calls SWI 0x46144.
  224.  */
  225.  
  226. extern os_error *xdma_suspend_transfer (bits flags,
  227.       dma_tag tag);
  228. extern void dma_suspend_transfer (bits flags,
  229.       dma_tag tag);
  230.  
  231. /* ------------------------------------------------------------------------
  232.  * Function:      dma_resume_transfer()
  233.  *
  234.  * Description:   Resumes a previously suspended DMA transfer
  235.  *
  236.  * Input:         flags - value of R0 on entry
  237.  *                tag - value of R1 on entry
  238.  *
  239.  * Other notes:   Calls SWI 0x46145.
  240.  */
  241.  
  242. extern os_error *xdma_resume_transfer (bits flags,
  243.       dma_tag tag);
  244. extern void dma_resume_transfer (bits flags,
  245.       dma_tag tag);
  246.  
  247. /* ------------------------------------------------------------------------
  248.  * Function:      dma_examine_transfer()
  249.  *
  250.  * Description:   Returns the progress of a DMA transfer
  251.  *
  252.  * Input:         flags - value of R0 on entry
  253.  *                tag - value of R1 on entry
  254.  *
  255.  * Output:        transferred_size - value of R0 on exit
  256.  *
  257.  * Other notes:   Calls SWI 0x46146.
  258.  */
  259.  
  260. extern os_error *xdma_examine_transfer (bits flags,
  261.       dma_tag tag,
  262.       int *transferred_size);
  263. extern void dma_examine_transfer (bits flags,
  264.       dma_tag tag,
  265.       int *transferred_size);
  266.  
  267. #ifdef __cplusplus
  268.    }
  269. #endif
  270.  
  271. #endif
  272.