1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
2 | /* |
3 | * Intel Smart Sound Technology (SST) Core |
4 | * |
5 | * Copyright (C) 2013, Intel Corporation. All rights reserved. |
6 | */ |
7 | |
8 | #ifndef __SOUND_SOC_SST_DSP_H |
9 | #define __SOUND_SOC_SST_DSP_H |
10 | |
11 | #include <linux/kernel.h> |
12 | #include <linux/types.h> |
13 | #include <linux/interrupt.h> |
14 | |
15 | struct sst_dsp; |
16 | |
17 | /* |
18 | * SST Device. |
19 | * |
20 | * This structure is populated by the SST core driver. |
21 | */ |
22 | struct sst_dsp_device { |
23 | /* Mandatory fields */ |
24 | struct sst_ops *ops; |
25 | irqreturn_t (*thread)(int irq, void *context); |
26 | void *thread_context; |
27 | }; |
28 | |
29 | /* SHIM Read / Write */ |
30 | void sst_dsp_shim_write(struct sst_dsp *sst, u32 offset, u32 value); |
31 | u32 sst_dsp_shim_read(struct sst_dsp *sst, u32 offset); |
32 | int sst_dsp_shim_update_bits(struct sst_dsp *sst, u32 offset, |
33 | u32 mask, u32 value); |
34 | void sst_dsp_shim_update_bits_forced(struct sst_dsp *sst, u32 offset, |
35 | u32 mask, u32 value); |
36 | |
37 | /* SHIM Read / Write Unlocked for callers already holding sst lock */ |
38 | void sst_dsp_shim_write_unlocked(struct sst_dsp *sst, u32 offset, u32 value); |
39 | u32 sst_dsp_shim_read_unlocked(struct sst_dsp *sst, u32 offset); |
40 | int sst_dsp_shim_update_bits_unlocked(struct sst_dsp *sst, u32 offset, |
41 | u32 mask, u32 value); |
42 | void sst_dsp_shim_update_bits_forced_unlocked(struct sst_dsp *sst, u32 offset, |
43 | u32 mask, u32 value); |
44 | |
45 | /* Internal generic low-level SST IO functions - can be overidden */ |
46 | void sst_shim32_write(void __iomem *addr, u32 offset, u32 value); |
47 | u32 sst_shim32_read(void __iomem *addr, u32 offset); |
48 | void sst_shim32_write64(void __iomem *addr, u32 offset, u64 value); |
49 | u64 sst_shim32_read64(void __iomem *addr, u32 offset); |
50 | |
51 | /* Mailbox management */ |
52 | int sst_dsp_mailbox_init(struct sst_dsp *sst, u32 inbox_offset, |
53 | size_t inbox_size, u32 outbox_offset, size_t outbox_size); |
54 | void sst_dsp_inbox_write(struct sst_dsp *sst, void *message, size_t bytes); |
55 | void sst_dsp_inbox_read(struct sst_dsp *sst, void *message, size_t bytes); |
56 | void sst_dsp_outbox_write(struct sst_dsp *sst, void *message, size_t bytes); |
57 | void sst_dsp_outbox_read(struct sst_dsp *sst, void *message, size_t bytes); |
58 | int sst_dsp_register_poll(struct sst_dsp *ctx, u32 offset, u32 mask, |
59 | u32 target, u32 time, char *operation); |
60 | |
61 | #endif |
62 | |