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
8/* Matrix calculation related functions */
9
10#ifndef __SOF_MATH_MATRIX_H__
11#define __SOF_MATH_MATRIX_H__
12
14#include <rtos/alloc.h>
15#include <ipc/topology.h>
16#include <stdint.h>
17#include <string.h>
18
20 int16_t rows;
21 int16_t columns;
22 int16_t fractions;
23 int16_t reserved;
24 int16_t data[];
25};
26
27static inline void mat_init_16b(struct mat_matrix_16b *mat, int16_t rows, int16_t columns,
28 int16_t fractions)
29{
30 mat->rows = rows;
31 mat->columns = columns;
32 mat->fractions = fractions;
33}
34
35static inline struct mat_matrix_16b *mat_matrix_alloc_16b(int16_t rows, int16_t columns,
36 int16_t fractions)
37{
38 struct mat_matrix_16b *mat;
39 const int mat_size = sizeof(int16_t) * rows * columns + sizeof(struct mat_matrix_16b);
40
41 mat = rzalloc(SOF_MEM_FLAG_USER, mat_size);
42 if (mat)
44
45 return mat;
46}
47
48static inline struct mat_matrix_16b *mod_mat_matrix_alloc_16b(struct processing_module *mod,
49 int16_t rows, int16_t columns,
50 int16_t fractions)
51{
52 struct mat_matrix_16b *mat;
53 const int mat_size = sizeof(int16_t) * rows * columns + sizeof(struct mat_matrix_16b);
54
55 mat = mod_zalloc(mod, mat_size);
56 if (mat)
58
59 return mat;
60}
61
62static inline void mat_copy_from_linear_16b(struct mat_matrix_16b *mat, const int16_t *lin_data)
63{
64 size_t bytes = sizeof(int16_t) * mat->rows * mat->columns;
65
66 memcpy_s(mat->data, bytes, lin_data, bytes);
67}
68
69static inline void mat_set_all_16b(struct mat_matrix_16b *mat, int16_t val)
70{
71 const int n = mat->rows * mat->columns;
72 int i;
73
74 for (i = 0; i < n; i++)
75 mat->data[i] = val;
76}
77
78static inline int16_t mat_get_scalar_16b(struct mat_matrix_16b *mat, int row, int col)
79{
80 return mat->data[col + row * mat->columns];
81}
82
83static inline void mat_set_scalar_16b(struct mat_matrix_16b *mat, int row, int col, int16_t val)
84{
85 mat->data[col + row * mat->columns] = val;
86}
87
88static inline int16_t *mat_get_row_vector_16b(struct mat_matrix_16b *mat, int row)
89{
90 return mat->data + row * mat->columns;
91}
92
93int mat_multiply(struct mat_matrix_16b *a, struct mat_matrix_16b *b, struct mat_matrix_16b *c);
94
96 struct mat_matrix_16b *c);
97
98#endif /* __SOF_MATH_MATRIX_H__ */
static void * mod_zalloc(struct processing_module *mod, size_t size)
Definition generic.h:234
void * rzalloc(uint32_t flags, size_t bytes)
Similar to rmalloc(), guarantees that returned block is zeroed.
#define SOF_MEM_FLAG_USER
Allocate user memory address.
Definition alloc.h:45
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:83
static int16_t * mat_get_row_vector_16b(struct mat_matrix_16b *mat, int row)
Definition matrix.h:88
static void mat_copy_from_linear_16b(struct mat_matrix_16b *mat, const int16_t *lin_data)
Definition matrix.h:62
static void mat_init_16b(struct mat_matrix_16b *mat, int16_t rows, int16_t columns, int16_t fractions)
Definition matrix.h:27
static struct mat_matrix_16b * mat_matrix_alloc_16b(int16_t rows, int16_t columns, int16_t fractions)
Definition matrix.h:35
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:69
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:48
static int16_t mat_get_scalar_16b(struct mat_matrix_16b *mat, int row, int col)
Definition matrix.h:78
static int memcpy_s(void *dest, size_t dest_size, const void *src, size_t count)
Definition string.h:38
Definition matrix.h:19
int16_t rows
Definition matrix.h:20
int16_t data[]
Definition matrix.h:24
int16_t reserved
Definition matrix.h:23
int16_t columns
Definition matrix.h:21
int16_t fractions
Definition matrix.h:22