Commit | Line | Data |
---|---|---|
e149ca29 | 1 | /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ |
53e0c72d LG |
2 | /* |
3 | * This file is provided under a dual BSD/GPLv2 license. When using or | |
4 | * redistributing this file, you may do so under either license. | |
5 | * | |
ea89a742 | 6 | * Copyright(c) 2018 Intel Corporation |
53e0c72d LG |
7 | */ |
8 | ||
9 | #ifndef __INCLUDE_SOUND_SOF_INFO_H__ | |
10 | #define __INCLUDE_SOUND_SOF_INFO_H__ | |
11 | ||
12 | #include <sound/sof/header.h> | |
13 | #include <sound/sof/stream.h> | |
14 | ||
15 | /* | |
16 | * Firmware boot and version | |
17 | */ | |
18 | ||
19 | #define SOF_IPC_MAX_ELEMS 16 | |
20 | ||
347d1c4b SB |
21 | /* |
22 | * Firmware boot info flag bits (64-bit) | |
23 | */ | |
24 | #define SOF_IPC_INFO_BUILD BIT(0) | |
25 | #define SOF_IPC_INFO_LOCKS BIT(1) | |
26 | #define SOF_IPC_INFO_LOCKSV BIT(2) | |
27 | #define SOF_IPC_INFO_GDB BIT(3) | |
1dafede3 | 28 | #define SOF_IPC_INFO_D3_PERSISTENT BIT(4) |
347d1c4b | 29 | |
53e0c72d LG |
30 | /* extended data types that can be appended onto end of sof_ipc_fw_ready */ |
31 | enum sof_ipc_ext_data { | |
a6096f88 | 32 | SOF_IPC_EXT_UNUSED = 0, |
4ea25785 KT |
33 | SOF_IPC_EXT_WINDOW = 1, |
34 | SOF_IPC_EXT_CC_INFO = 2, | |
786d6516 | 35 | SOF_IPC_EXT_PROBE_INFO = 3, |
2014185e | 36 | SOF_IPC_EXT_USER_ABI_INFO = 4, |
53e0c72d LG |
37 | }; |
38 | ||
003b786b KV |
39 | /* Build u32 number in format MMmmmppp */ |
40 | #define SOF_FW_VER(MAJOR, MINOR, PATCH) ((uint32_t)( \ | |
41 | ((MAJOR) << 24) | ((MINOR) << 12) | (PATCH))) | |
42 | ||
53e0c72d LG |
43 | /* FW version - SOF_IPC_GLB_VERSION */ |
44 | struct sof_ipc_fw_version { | |
45 | struct sof_ipc_hdr hdr; | |
46 | uint16_t major; | |
47 | uint16_t minor; | |
48 | uint16_t micro; | |
49 | uint16_t build; | |
50 | uint8_t date[12]; | |
51 | uint8_t time[10]; | |
52 | uint8_t tag[6]; | |
53 | uint32_t abi_version; | |
6eab7714 KT |
54 | /* used to check FW and ldc file compatibility, reproducible value */ |
55 | uint32_t src_hash; | |
53e0c72d LG |
56 | |
57 | /* reserved for future use */ | |
6eab7714 | 58 | uint32_t reserved[3]; |
53e0c72d LG |
59 | } __packed; |
60 | ||
61 | /* FW ready Message - sent by firmware when boot has completed */ | |
62 | struct sof_ipc_fw_ready { | |
63 | struct sof_ipc_cmd_hdr hdr; | |
64 | uint32_t dspbox_offset; /* dsp initiated IPC mailbox */ | |
65 | uint32_t hostbox_offset; /* host initiated IPC mailbox */ | |
66 | uint32_t dspbox_size; | |
67 | uint32_t hostbox_size; | |
68 | struct sof_ipc_fw_version version; | |
69 | ||
347d1c4b SB |
70 | /* Miscellaneous flags */ |
71 | uint64_t flags; | |
53e0c72d LG |
72 | |
73 | /* reserved for future use */ | |
74 | uint32_t reserved[4]; | |
75 | } __packed; | |
76 | ||
77 | /* | |
78 | * Extended Firmware data. All optional, depends on platform/arch. | |
79 | */ | |
80 | enum sof_ipc_region { | |
81 | SOF_IPC_REGION_DOWNBOX = 0, | |
82 | SOF_IPC_REGION_UPBOX, | |
83 | SOF_IPC_REGION_TRACE, | |
84 | SOF_IPC_REGION_DEBUG, | |
85 | SOF_IPC_REGION_STREAM, | |
86 | SOF_IPC_REGION_REGS, | |
87 | SOF_IPC_REGION_EXCEPTION, | |
88 | }; | |
89 | ||
90 | struct sof_ipc_ext_data_hdr { | |
91 | struct sof_ipc_cmd_hdr hdr; | |
92 | uint32_t type; /**< SOF_IPC_EXT_ */ | |
93 | } __packed; | |
94 | ||
53e0c72d LG |
95 | struct sof_ipc_window_elem { |
96 | struct sof_ipc_hdr hdr; | |
97 | uint32_t type; /**< SOF_IPC_REGION_ */ | |
98 | uint32_t id; /**< platform specific - used to map to host memory */ | |
99 | uint32_t flags; /**< R, W, RW, etc - to define */ | |
100 | uint32_t size; /**< size of region in bytes */ | |
101 | /* offset in window region as windows can be partitioned */ | |
102 | uint32_t offset; | |
103 | } __packed; | |
104 | ||
105 | /* extended data memory windows for IPC, trace and debug */ | |
106 | struct sof_ipc_window { | |
107 | struct sof_ipc_ext_data_hdr ext_hdr; | |
108 | uint32_t num_windows; | |
76ab546c | 109 | struct sof_ipc_window_elem window[SOF_IPC_MAX_ELEMS]; |
53e0c72d LG |
110 | } __packed; |
111 | ||
e8b7cab8 KT |
112 | struct sof_ipc_cc_version { |
113 | struct sof_ipc_ext_data_hdr ext_hdr; | |
114 | uint32_t major; | |
115 | uint32_t minor; | |
116 | uint32_t micro; | |
117 | ||
118 | /* reserved for future use */ | |
119 | uint32_t reserved[4]; | |
120 | ||
e6224484 PX |
121 | uint8_t name[16]; /* null terminated compiler name */ |
122 | uint8_t optim[4]; /* null terminated compiler -O flag value */ | |
a9a9cbf0 | 123 | uint8_t desc[32]; /* null terminated compiler description */ |
e8b7cab8 KT |
124 | } __packed; |
125 | ||
786d6516 PX |
126 | /* extended data: Probe setup */ |
127 | struct sof_ipc_probe_support { | |
128 | struct sof_ipc_ext_data_hdr ext_hdr; | |
129 | ||
130 | uint32_t probe_points_max; | |
131 | uint32_t injection_dmas_max; | |
132 | ||
133 | /* reserved for future use */ | |
134 | uint32_t reserved[2]; | |
135 | } __packed; | |
136 | ||
2014185e PX |
137 | /* extended data: user abi version(s) */ |
138 | struct sof_ipc_user_abi_version { | |
139 | struct sof_ipc_ext_data_hdr ext_hdr; | |
140 | ||
141 | uint32_t abi_dbg_version; | |
142 | } __packed; | |
143 | ||
53e0c72d | 144 | #endif |