Sound Open Firmware
Loading...
Searching...
No Matches
data_blob.h File Reference
Include dependency graph for data_blob.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void * comp_get_data_blob (struct comp_data_blob_handler *blob_handler, size_t *size, uint32_t *crc)
 Returns data blob.
bool comp_is_new_data_blob_available (struct comp_data_blob_handler *blob_handler)
 Checks whether new data blob is available.
bool comp_is_current_data_blob_valid (struct comp_data_blob_handler *blob_handler)
 Checks whether there is a valid data blob is available.
int comp_init_data_blob (struct comp_data_blob_handler *blob_handler, uint32_t size, const void *init_data)
 Initializes data blob with given value.
int comp_data_blob_set_cmd (struct comp_data_blob_handler *blob_handler, struct sof_ipc_ctrl_data *cdata)
 Handles IPC set command.
int comp_data_blob_set (struct comp_data_blob_handler *blob_handler, enum module_cfg_fragment_position pos, uint32_t data_offset_size, const uint8_t *fragment, size_t fragment_size)
 Handles IPC set command.
int ipc4_comp_data_blob_set (struct comp_data_blob_handler *blob_handler, bool first_block, bool last_block, uint32_t data_offset, const char *data)
 Handles IPC4 set large config.
int comp_data_blob_get_cmd (struct comp_data_blob_handler *blob_handler, struct sof_ipc_ctrl_data *cdata, int size)
 Handles IPC get command.
struct comp_data_blob_handler * comp_data_blob_handler_new_ext (struct comp_dev *dev, bool single_blob, void *(*alloc)(size_t size), void(*free)(void *buf))
 Returns new data blob handler.
static struct comp_data_blob_handler * comp_data_blob_handler_new (struct comp_dev *dev)
 Returns new data blob handler.
void comp_data_blob_handler_free (struct comp_data_blob_handler *blob_handler)
 Free data blob handler.
void comp_data_blob_set_validator (struct comp_data_blob_handler *blob_handler, int(*validator)(struct comp_dev *dev, void *new_data, uint32_t new_data_size))
 Add a validator to check that the new data blob is valid for the given component.

Function Documentation

◆ comp_data_blob_get_cmd()

int comp_data_blob_get_cmd ( struct comp_data_blob_handler * blob_handler,
struct sof_ipc_ctrl_data * cdata,
int size )

Handles IPC get command.

Parameters
blob_handlerData blob handler
cdataIPC ctrl data
sizeRequired size

◆ comp_data_blob_handler_free()

void comp_data_blob_handler_free ( struct comp_data_blob_handler * blob_handler)

Free data blob handler.

Parameters
blob_handlerData blob handler

◆ comp_data_blob_handler_new()

struct comp_data_blob_handler * comp_data_blob_handler_new ( struct comp_dev * dev)
inlinestatic

Returns new data blob handler.

This is a simplified version of comp_data_blob_handler_new_ext() using default memory allocator and double blob mode for on the fly updates.

Parameters
devComponent device

◆ comp_data_blob_handler_new_ext()

struct comp_data_blob_handler * comp_data_blob_handler_new_ext ( struct comp_dev * dev,
bool single_blob,
void *(* alloc )(size_t size),
void(* free )(void *buf) )

Returns new data blob handler.

Data blob handler has two modes of operation, single_blob == false stands for double blob mode that allow seamless configuration updates on the fly. In single_blob == true mode there is at most one blob allocated at one time and configuration update is not allowed if the component is active. The single blob mode should be used with components with very big configuration blobs to save DSP memory.

Parameters
devComponent device
single_blobSet true for single configuration blob operation
allocOptional blob memory allocator function pointer
freeOptional blob memory free function pointer

◆ comp_data_blob_set()

int comp_data_blob_set ( struct comp_data_blob_handler * blob_handler,
enum module_cfg_fragment_position pos,
uint32_t data_offset_size,
const uint8_t * fragment,
size_t fragment_size )

Handles IPC set command.

Parameters
blob_handlerData blob handler
posposition: of the data fragment
data_offset_sizeoffset of the fragment in the whole data
fragmentpointer to the fragment data
fragment_sizesize of the fragment data

◆ comp_data_blob_set_cmd()

int comp_data_blob_set_cmd ( struct comp_data_blob_handler * blob_handler,
struct sof_ipc_ctrl_data * cdata )

Handles IPC set command.

Parameters
blob_handlerData blob handler
cdataIPC ctrl data

◆ comp_data_blob_set_validator()

void comp_data_blob_set_validator ( struct comp_data_blob_handler * blob_handler,
int(* validator )(struct comp_dev *dev, void *new_data, uint32_t new_data_size) )

Add a validator to check that the new data blob is valid for the given component.

If the given validator is null (the default value), then any data blob will be considered valid.

Parameters
blob_handlerData blob handler
validatorFunction used to validate the new data blob

◆ comp_get_data_blob()

void * comp_get_data_blob ( struct comp_data_blob_handler * blob_handler,
size_t * size,
uint32_t * crc )

Returns data blob.

In case when new data blob is available it returns new one. Function returns also data blob size in case when size pointer is given.

Parameters
blob_handlerData blob handler
sizePointer to data blob size variable
crcPointer to data blolb crc value

◆ comp_init_data_blob()

int comp_init_data_blob ( struct comp_data_blob_handler * blob_handler,
uint32_t size,
const void * init_data )

Initializes data blob with given value.

If init_data is not specified, function will zero data blob.

Parameters
blob_handlerData blob handler
sizeData blob size
init_dataInitial data blob values

◆ comp_is_current_data_blob_valid()

bool comp_is_current_data_blob_valid ( struct comp_data_blob_handler * blob_handler)

Checks whether there is a valid data blob is available.

Parameters
blob_handlerData blob handler

◆ comp_is_new_data_blob_available()

bool comp_is_new_data_blob_available ( struct comp_data_blob_handler * blob_handler)

Checks whether new data blob is available.

Function allows to check (even during streaming - in copy() function) whether new config is available and if it is, component can perform reconfiguration.

Parameters
blob_handlerData blob handler

◆ ipc4_comp_data_blob_set()

int ipc4_comp_data_blob_set ( struct comp_data_blob_handler * blob_handler,
bool first_block,
bool last_block,
uint32_t data_offset,
const char * data )

Handles IPC4 set large config.

Parameters
blob_handlerData blob handler
first_blockFlag indicates it is a first block of data
last_blockFlag indicates it is a last block of data
data_offsetSize/offset of the data being sent
dataPointer to the data array