Sound Open Firmware
Loading...
Searching...
No Matches
mailbox.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: BSD-3-Clause
2 *
3 * Copyright(c) 2016 Intel Corporation. All rights reserved.
4 *
5 * Author: Liam Girdwood <liam.r.girdwood@linux.intel.com>
6 * Xiuli Pan <xiuli.pan@linux.intel.com>
7 */
8
9#ifndef __SOF_LIB_MAILBOX_H__
10#define __SOF_LIB_MAILBOX_H__
11
12#include <sof/common.h>
13#include <kernel/mailbox.h>
14#include <platform/lib/mailbox.h>
15#include <rtos/panic.h>
16#include <rtos/cache.h>
17#include <sof/lib/memory.h>
18#include <rtos/string.h>
19#include <stddef.h>
20#include <stdint.h>
21
22#define mailbox_get_exception_base() \
23 MAILBOX_EXCEPTION_BASE
24
25#define mailbox_get_exception_size() \
26 MAILBOX_EXCEPTION_SIZE
27
28#define mailbox_get_dspbox_base() \
29 MAILBOX_DSPBOX_BASE
30
31#define mailbox_get_dspbox_size() \
32 MAILBOX_DSPBOX_SIZE
33
34#define mailbox_get_hostbox_base() \
35 MAILBOX_HOSTBOX_BASE
36
37#define mailbox_get_hostbox_size() \
38 MAILBOX_HOSTBOX_SIZE
39
40#define mailbox_get_debug_base() \
41 MAILBOX_DEBUG_BASE
42
43#define mailbox_get_debug_size() \
44 MAILBOX_DEBUG_SIZE
45
46static inline
47void mailbox_dspbox_write(size_t offset, const void *src, size_t bytes)
48{
49 int dsp_write_err __unused = memcpy_s((void *)(MAILBOX_DSPBOX_BASE + offset),
50 MAILBOX_DSPBOX_SIZE - offset, src, bytes);
51
52 assert(!dsp_write_err);
53 dcache_writeback_region((__sparse_force void __sparse_cache *)(MAILBOX_DSPBOX_BASE +
54 offset), bytes);
55}
56
57static inline
58void mailbox_dspbox_read(void *dest, size_t dest_size,
59 size_t offset, size_t bytes)
60{
61 int dsp_read_err __unused;
62
63 dcache_invalidate_region((__sparse_force void __sparse_cache *)(MAILBOX_DSPBOX_BASE +
64 offset), bytes);
65 dsp_read_err = memcpy_s(dest, dest_size,
66 (void *)(MAILBOX_DSPBOX_BASE + offset), bytes);
67 assert(!dsp_read_err);
68}
69
70#if CONFIG_LIBRARY
71
72#define mailbox_hostbox_write(_offset, _src, _bytes) \
73 memcpy((char *)ipc->comp_data + _offset, _src, _bytes)
74
75#else
76
77static inline
78void mailbox_hostbox_write(size_t offset, const void *src, size_t bytes)
79{
80 int host_write_err __unused = memcpy_s((void *)(MAILBOX_HOSTBOX_BASE + offset),
81 MAILBOX_HOSTBOX_SIZE - offset, src, bytes);
82
83 assert(!host_write_err);
84 dcache_writeback_region((__sparse_force void __sparse_cache *)(MAILBOX_HOSTBOX_BASE +
85 offset), bytes);
86}
87
88#endif
89
90static inline
91void mailbox_hostbox_read(void *dest, size_t dest_size,
92 size_t offset, size_t bytes)
93{
94 int host_read_err __unused;
95
96 dcache_invalidate_region((__sparse_force void __sparse_cache *)(MAILBOX_HOSTBOX_BASE +
97 offset), bytes);
98 host_read_err = memcpy_s(dest, dest_size,
99 (void *)(MAILBOX_HOSTBOX_BASE + offset), bytes);
100 assert(!host_read_err);
101}
102
103#if CONFIG_IPC_MAJOR_4
104static inline
105void mailbox_stream_write(size_t offset, const void *src, size_t bytes)
106{
107 /* in IPC4, the stream mailbox must not be used */
108 assert(false);
109}
110#else
111static inline
112void mailbox_stream_write(size_t offset, const void *src, size_t bytes)
113{
114 int stream_write_err __unused = memcpy_s((void *)(MAILBOX_STREAM_BASE + offset),
115 MAILBOX_STREAM_SIZE - offset, src, bytes);
116
117 assert(!stream_write_err);
118 dcache_writeback_region((__sparse_force void __sparse_cache *)(MAILBOX_STREAM_BASE +
119 offset), bytes);
120}
121#endif
122
123#endif /* __SOF_LIB_MAILBOX_H__ */
static void dcache_writeback_region(void __sparse_cache *addr, size_t size)
Definition cache.h:38
static void dcache_invalidate_region(void __sparse_cache *addr, size_t size)
Definition cache.h:44
FW Regs API definition.
#define assert(x)
Definition panic.h:19
static void mailbox_hostbox_read(void *dest, size_t dest_size, size_t offset, size_t bytes)
Definition mailbox.h:91
static void mailbox_dspbox_read(void *dest, size_t dest_size, size_t offset, size_t bytes)
Definition mailbox.h:58
static void mailbox_dspbox_write(size_t offset, const void *src, size_t bytes)
Definition mailbox.h:47
static void mailbox_hostbox_write(size_t offset, const void *src, size_t bytes)
Definition mailbox.h:78
static void mailbox_stream_write(size_t offset, const void *src, size_t bytes)
Definition mailbox.h:112
static int memcpy_s(void *dest, size_t dest_size, const void *src, size_t count)
Definition string.h:38
#define __unused
Definition compiler_attributes.h:19
#define __sparse_force
Definition compiler_attributes.h:12
#define __sparse_cache
Definition compiler_attributes.h:11