soc2010jakubklama:engineapi

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
soc2010jakubklama:engineapi [2010/06/05 11:32] – JakubKlamasoc2010jakubklama:engineapi [2010/07/21 09:21] (current) – JakubKlama
Line 1: Line 1:
 **Warning:** this is dirty working draft version and is subject to change in future. **Warning:** this is dirty working draft version and is subject to change in future.
  
-The DMA engine device driver should include "dmae_if.h", %%<%%sys/dev/dmae/dmae.h> header+The DMA engine device driver should include "gpdma_if.h", %%<%%sys/dev/gpdma/gpdma.h> header
 files and support following kobject methods: files and support following kobject methods:
  
-<code>+<code cpp>
 int setup_channel(device_t dev, int channel, struct dmae_transfer *xfer) int setup_channel(device_t dev, int channel, struct dmae_transfer *xfer)
 </code> </code>
Line 12: Line 12:
 trigger. Returns 0 on success, nonzero on error. trigger. Returns 0 on success, nonzero on error.
  
-<code>+<code cpp>
 int clear_channel(device_t dev, int channel) int clear_channel(device_t dev, int channel)
 </code> </code>
Line 19: Line 19:
 kind of operation on that channel. Returns 0 on success, nonzero on error. kind of operation on that channel. Returns 0 on success, nonzero on error.
  
-<code>+<code cpp>
 int start_channel(device_t dev, int channel) int start_channel(device_t dev, int channel)
 </code> </code>
Line 27: Line 27:
 nonzero on error. nonzero on error.
  
-<code>+<code cpp>
 int stop_channel(device_t dev, int channel) int stop_channel(device_t dev, int channel)
 </code> </code>
Line 35: Line 35:
 ENOTSUP. ENOTSUP.
  
-<code>+<code cpp>
 int poll_channel(device_t dev, int channel, int *status) int poll_channel(device_t dev, int channel, int *status)
 </code> </code>
  
-Returns channel status. TODO describe+Returns channel status. Returns 0 if obtained correct status or 
 +nonzero if any error occured or channel status is unavailable. 
 +//*status// is filled with one of //enum gpdma_transfer_status//
  
-<code> +<code cpp> 
-int validate_transfer(device_t dev, int channel, struct dmae_transfer *xfer)+int validate_transfer(device_t dev, int channel, struct gpdma_transfer *xfer)
 </code> </code>
  
-Returns 0 if supplied transfer can be done usin //channel// on engine //dev//, +Returns 0 if supplied transfer can be done using //channel// on engine //dev//, 
-or nonzero if cannot.+or nonzero if cannot. This method is optional - default implementation returns 
 +0.
  
-DMA engines registers themselves using //dmae_register_driver// function in +DMA engines registers themselves using //gpdma_register_driver// function in 
-their attach method. //dmae_register_driver// is defined as follows:+their attach method. //gpdma_register_driver// is defined as follows:
  
-<code> +<code cpp> 
-int dmae_register_driver(device_t dev, struct dmae_capabilities *caps, bus_dma_tag_t tag);+int gpdma_register_driver(device_t dev, struct dmae_capabilities *caps, bus_dma_tag_t tag);
 </code> </code>
  
Line 58: Line 61:
   * caps - DMA capabilities structure defined as follows:   * caps - DMA capabilities structure defined as follows:
  
-<code> +<code cpp> 
-struct dmae_capabilities {+struct gpdma_capabilities {
         uint32_t                        dc_ops; /* one or more from 'enum dmae_op' */         uint32_t                        dc_ops; /* one or more from 'enum dmae_op' */
         uint32_t                        dc_buffers; /* one or more from 'enum dmae_buffer_type' */         uint32_t                        dc_buffers; /* one or more from 'enum dmae_buffer_type' */
Line 73: Line 76:
 and can be unregistered (at device detach) using: and can be unregistered (at device detach) using:
  
-<code> +<code cpp> 
-int dmae_unregister_driver(device_t dev);+int gpdma_unregister_driver(device_t dev);
 </code> </code>
  
 ===== Required data structures: ===== ===== Required data structures: =====
  
-<code> +<code cpp> 
-typedef struct dmae_engine *dmae_engine_t; +typedef struct gpdma_engine *gpdma_engine_t; 
-typedef int (*dmae_callback_t)(int status, void *arg);+typedef int (*gpdma_callback_t)(int status, void *arg);
  
-enum dmae_op {+enum gpdma_op {
         DMAE_FILL       = 0x1,         DMAE_FILL       = 0x1,
         DMAE_COPY       = 0x2,         DMAE_COPY       = 0x2,
Line 89: Line 92:
 }; };
  
-enum dmae_transfer_status {+enum gpdma_transfer_status {
         DMAE_TRANSFER_COMPLETED,         DMAE_TRANSFER_COMPLETED,
         DMAE_TRANSFER_COMPLETED_STRIDE,         DMAE_TRANSFER_COMPLETED_STRIDE,
         DMAE_TRANSFER_COMPLETED_LINK,         DMAE_TRANSFER_COMPLETED_LINK,
         DMAE_TRANSFER_CANCELLED,         DMAE_TRANSFER_CANCELLED,
 +        DMAE_TRANSFER_IN_PROGRESS,
         DMAE_TRANSFER_ERROR,         DMAE_TRANSFER_ERROR,
 }; };
  
-enum dmae_buffer_type {+enum gpdma_buffer_type {
         DMAEBUF_BLOCK           = 0x1,         DMAEBUF_BLOCK           = 0x1,
         DMAEBUF_FRAME           = 0x2,         DMAEBUF_FRAME           = 0x2,
Line 103: Line 107:
 }; };
  
-struct dmae_buffer { +struct gpdma_buffer { 
-        struct dmae_transfer *  db_transfer;+        struct gpdma_transfer * db_transfer;
         int                     db_type;         int                     db_type;
         int                     db_flags;         int                     db_flags;
Line 119: Line 123:
 }; };
  
-struct dmae_transfer {+struct gpdma_transfer {
         int                     dt_type;         int                     dt_type;
         int                     dt_op;         int                     dt_op;
         int                     dt_flags;         int                     dt_flags;
-#define DMAE_TRANSFER_EXTTRIG           0x1 /* transfer is triggered by external source */ +#define GPDMA_TRANSFER_EXTTRIG           0x1 /* transfer is triggered by external source */ 
-#define DMAE_TRANSFER_REPEAT            0x2 /* repeat transfer until cancel */ +#define GPDMA_TRANSFER_REPEAT            0x2 /* repeat transfer until cancel */ 
-#define DMAE_TRANSFER_NOINTR            0x4 /* don't generate callbacks */ +#define GPDMA_TRANSFER_NOINTR            0x4 /* don't generate callbacks */ 
-#define DMAE_TRANSFER_STRIDE_CALLBACK   0x8 /* callback on every stride */ +#define GPDMA_TRANSFER_STRIDE_CALLBACK   0x8 /* callback on every stride */ 
-#define DMAE_TRANSFER_LINK_CALLBACK     0x10 /* callback on every linked transfer */ +#define GPDMA_TRANSFER_LINK_CALLBACK     0x10 /* callback on every linked transfer */ 
-        dmae_callback_t         dt_callback;+        gpdma_callback_t        dt_callback;
         void *                  dt_callback_arg;         void *                  dt_callback_arg;
-        struct dmae_buffer      dt_buffers[8]; +        struct gpdma_buffer     dt_buffers[8]; 
-#define DMAE_BUF_DST            0 +#define GPDMA_BUF_DST           0 
-#define DMAE_BUF_SRC            1 +#define GPDMA_BUF_SRC           1 
-        struct dmae_transfer *  dt_next;+        struct gpdma_transfer * dt_next;
  
         /* Private fields: */         /* Private fields: */
-        struct dmae_engine *    dt_engine;+        struct gpdma_engine *   dt_engine;
         struct resource *       dt_res;         struct resource *       dt_res;
 }; };
 </code> </code>
  
  • soc2010jakubklama/engineapi.1275737540.txt.gz
  • Last modified: 2010/06/05 11:32
  • by JakubKlama