Sound Open Firmware
Loading...
Searching...
No Matches
matrix.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 *
3 * Copyright(c) 2022 Intel Corporation. All rights reserved.
4 *
5 * Author: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
6 */
7
14#ifndef __SOF_MATH_MATRIX_H__
15#define __SOF_MATH_MATRIX_H__
16
18#include <rtos/alloc.h>
19#include <ipc/topology.h>
20#include <stdint.h>
21#include <string.h>
22
24 int16_t rows;
25 int16_t columns;
26 int16_t fractions;
27 int16_t reserved;
28 int16_t data[];
29};
30
31static inline void mat_init_16b(struct mat_matrix_16b *mat, int16_t rows, int16_t columns,
32 int16_t fractions)
33{
34 mat->rows = rows;
35 mat->columns = columns;
36 mat->fractions = fractions;
37}
38
39static inline struct mat_matrix_16b *mat_matrix_alloc_16b(int16_t rows, int16_t columns,
40 int16_t fractions)
41{
42 struct mat_matrix_16b *mat;
43 const int mat_size = sizeof(int16_t) * rows * columns + sizeof(struct mat_matrix_16b);
44
45 mat = rzalloc(SOF_MEM_FLAG_USER, mat_size);
46 if (mat)
48
49 return mat;
50}
51
53 int16_t rows, int16_t columns,
54 int16_t fractions)
55{
56 struct mat_matrix_16b *mat;
57 const int mat_size = sizeof(int16_t) * rows * columns + sizeof(struct mat_matrix_16b);
58
59 mat = mod_zalloc(mod, mat_size);
60 if (mat)
62
63 return mat;
64}
65
66static inline void mat_copy_from_linear_16b(struct mat_matrix_16b *mat, const int16_t *lin_data)
67{
68 size_t bytes = sizeof(int16_t) * mat->rows * mat->columns;
69
70 memcpy_s(mat->data, bytes, lin_data, bytes);
71}
72
73static inline void mat_set_all_16b(struct mat_matrix_16b *mat, int16_t val)
74{
75 const int n = mat->rows * mat->columns;
76 int i;
77
78 for (i = 0; i < n; i++)
79 mat->data[i] = val;
80}
81
82static inline int16_t mat_get_scalar_16b(struct mat_matrix_16b *mat, int row, int col)
83{
84 return mat->data[col + row * mat->columns];
85}
86
87static inline void mat_set_scalar_16b(struct mat_matrix_16b *mat, int row, int col, int16_t val)
88{
89 mat->data[col + row * mat->columns] = val;
90}
91
92static inline int16_t *mat_get_row_vector_16b(struct mat_matrix_16b *mat, int row)
93{
94 return mat->data + row * mat->columns;
95}
96
97int mat_multiply(struct mat_matrix_16b *a, struct mat_matrix_16b *b, struct mat_matrix_16b *c);
98
100 struct mat_matrix_16b *c);
101
102#endif /* __SOF_MATH_MATRIX_H__ */
Memory allocation API, zones, heaps, and alignment utilities.
static void * mod_zalloc(struct processing_module *mod, size_t size)
Allocate zero-initialized memory block for module.
Definition generic.h:307
void * rzalloc(uint32_t flags, size_t bytes)
Allocate zero-initialized memory block with default natural alignment.
#define SOF_MEM_FLAG_USER
Base allocation flag denoting memory allocated for user-space threads and module execution.
Definition alloc.h:69
int mat_multiply(struct mat_matrix_16b *a, struct mat_matrix_16b *b, struct mat_matrix_16b *c)
static void mat_set_scalar_16b(struct mat_matrix_16b *mat, int row, int col, int16_t val)
Definition matrix.h:87
static int16_t * mat_get_row_vector_16b(struct mat_matrix_16b *mat, int row)
Definition matrix.h:92
static void mat_copy_from_linear_16b(struct mat_matrix_16b *mat, const int16_t *lin_data)
Definition matrix.h:66
static void mat_init_16b(struct mat_matrix_16b *mat, int16_t rows, int16_t columns, int16_t fractions)
Definition matrix.h:31
static struct mat_matrix_16b * mat_matrix_alloc_16b(int16_t rows, int16_t columns, int16_t fractions)
Definition matrix.h:39
int mat_multiply_elementwise(struct mat_matrix_16b *a, struct mat_matrix_16b *b, struct mat_matrix_16b *c)
static void mat_set_all_16b(struct mat_matrix_16b *mat, int16_t val)
Definition matrix.h:73
static struct mat_matrix_16b * mod_mat_matrix_alloc_16b(struct processing_module *mod, int16_t rows, int16_t columns, int16_t fractions)
Definition matrix.h:52
static int16_t mat_get_scalar_16b(struct mat_matrix_16b *mat, int row, int col)
Definition matrix.h:82
static int memcpy_s(void *dest, size_t dest_size, const void *src, size_t count)
Definition string.h:38
Definition matrix.h:23
int16_t rows
Definition matrix.h:24
int16_t data[]
Definition matrix.h:28
int16_t reserved
Definition matrix.h:27
int16_t columns
Definition matrix.h:25
int16_t fractions
Definition matrix.h:26
Definition base.h:103