Halide
Halide Hexagon DMA runtime

Enumerations

enum  halide_hexagon_image_fmt_t {
  halide_hexagon_fmt_RawData, halide_hexagon_fmt_NV12, halide_hexagon_fmt_NV12_Y, halide_hexagon_fmt_NV12_UV,
  halide_hexagon_fmt_P010, halide_hexagon_fmt_P010_Y, halide_hexagon_fmt_P010_UV, halide_hexagon_fmt_TP10,
  halide_hexagon_fmt_TP10_Y, halide_hexagon_fmt_TP10_UV, halide_hexagon_fmt_NV124R, halide_hexagon_fmt_NV124R_Y,
  halide_hexagon_fmt_NV124R_UV
}
 Image Formats to prepare the application for DMA Transfer. More...
 

Functions

const struct halide_device_interface_thalide_hexagon_dma_device_interface ()
 
int halide_hexagon_dma_device_wrap_native (void *user_context, struct halide_buffer_t *buf, uint64_t mem)
 This API is used to set up the DMA device interface to be used for DMA transfer. More...
 
int halide_hexagon_dma_device_detach_native (void *user_context, struct halide_buffer_t *buf)
 Detach the Input/Output Buffer from DMA device handle and deallocate the DMA device handle buffer allocation This API also frees up the DMA device and makes it available for another usage. More...
 
int halide_hexagon_dma_allocate_engine (void *user_context, void **dma_engine)
 This API will allocate a DMA Engine needed for DMA read/write. More...
 
int halide_hexagon_dma_deallocate_engine (void *user_context, void *dma_engine)
 This API free up the allocated DMA engine. More...
 
int halide_hexagon_dma_prepare_for_copy_to_host (void *user_context, struct halide_buffer_t *buf, void *dma_engine, bool is_ubwc, halide_hexagon_image_fmt_t fmt)
 This API Prepares a buffer for DMA Read Operation. More...
 
int halide_hexagon_dma_prepare_for_copy_to_device (void *user_context, struct halide_buffer_t *buf, void *dma_engine, bool is_ubwc, halide_hexagon_image_fmt_t fmt)
 This API Prepares a buffer for DMA Write Operation. More...
 
int halide_hexagon_dma_unprepare (void *user_context, struct halide_buffer_t *buf)
 This API is used to frees up the DMA Resources associated with the buffer. More...
 
int halide_hexagon_dma_power_mode_voting (void *user_context, halide_hexagon_power_mode_t cornercase)
 This API is used to setup the hexagon Operation modes. More...
 

Detailed Description

Enumeration Type Documentation

◆ halide_hexagon_image_fmt_t

Image Formats to prepare the application for DMA Transfer.

Enumerator
halide_hexagon_fmt_RawData 
halide_hexagon_fmt_NV12 
halide_hexagon_fmt_NV12_Y 
halide_hexagon_fmt_NV12_UV 
halide_hexagon_fmt_P010 
halide_hexagon_fmt_P010_Y 
halide_hexagon_fmt_P010_UV 
halide_hexagon_fmt_TP10 
halide_hexagon_fmt_TP10_Y 
halide_hexagon_fmt_TP10_UV 
halide_hexagon_fmt_NV124R 
halide_hexagon_fmt_NV124R_Y 
halide_hexagon_fmt_NV124R_UV 

Definition at line 34 of file HalideRuntimeHexagonDma.h.

Function Documentation

◆ halide_hexagon_dma_device_interface()

const struct halide_device_interface_t* halide_hexagon_dma_device_interface ( )

◆ halide_hexagon_dma_device_wrap_native()

int halide_hexagon_dma_device_wrap_native ( void *  user_context,
struct halide_buffer_t buf,
uint64_t  mem 
)

This API is used to set up the DMA device interface to be used for DMA transfer.

This also internally creates the DMA device handle and populates all the Buffer related parameters (width, height, stride) to be used for DMA configuration.

◆ halide_hexagon_dma_device_detach_native()

int halide_hexagon_dma_device_detach_native ( void *  user_context,
struct halide_buffer_t buf 
)

Detach the Input/Output Buffer from DMA device handle and deallocate the DMA device handle buffer allocation This API also frees up the DMA device and makes it available for another usage.

◆ halide_hexagon_dma_allocate_engine()

int halide_hexagon_dma_allocate_engine ( void *  user_context,
void **  dma_engine 
)

This API will allocate a DMA Engine needed for DMA read/write.

This is the first step Before a buffer can be used in a copy operation (i.e. a DMA read/write operation).

◆ halide_hexagon_dma_deallocate_engine()

int halide_hexagon_dma_deallocate_engine ( void *  user_context,
void *  dma_engine 
)

This API free up the allocated DMA engine.

This need to be called after a user program ends all the DMA Operations and make it available for subsequent DMA transfers

◆ halide_hexagon_dma_prepare_for_copy_to_host()

int halide_hexagon_dma_prepare_for_copy_to_host ( void *  user_context,
struct halide_buffer_t buf,
void *  dma_engine,
bool  is_ubwc,
halide_hexagon_image_fmt_t  fmt 
)

This API Prepares a buffer for DMA Read Operation.

This will setup the DMA format, direction (read). Will also make necessary adjustments to the DMA frame parameters based on Image format provided.

◆ halide_hexagon_dma_prepare_for_copy_to_device()

int halide_hexagon_dma_prepare_for_copy_to_device ( void *  user_context,
struct halide_buffer_t buf,
void *  dma_engine,
bool  is_ubwc,
halide_hexagon_image_fmt_t  fmt 
)

This API Prepares a buffer for DMA Write Operation.

This will setup the DMA format, direction (write). Will also make necessary adjustments to the DMA frame parameters based on Image format provided.

◆ halide_hexagon_dma_unprepare()

int halide_hexagon_dma_unprepare ( void *  user_context,
struct halide_buffer_t buf 
)

This API is used to frees up the DMA Resources associated with the buffer.

TODO: Currently this API is a dummy as all the necessary freeing is done in an another API. This will be used in future.

◆ halide_hexagon_dma_power_mode_voting()

int halide_hexagon_dma_power_mode_voting ( void *  user_context,
halide_hexagon_power_mode_t  cornercase 
)

This API is used to setup the hexagon Operation modes.

We will setup the necessary Operating frequency based on the power mode chosen. Check the structure halide_hexagon_power_mode_t defined in Halide HalideRuntimeHexagonHost.h for the supported power modes.