blob: 4641479d20d36fbbc70338703dbc052c1eb8cd15 [file] [log] [blame]
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -07001/* Copyright (c) 2011, Code Aurora Forum. All rights reserved.
2 *
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
6 *
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
11 */
12
13#ifndef _ARCH_ARM_MACH_MSM_SMSM_H_
14#define _ARCH_ARM_MACH_MSM_SMSM_H_
15
16#if defined(CONFIG_MSM_N_WAY_SMSM)
17enum {
18 SMSM_APPS_STATE,
19 SMSM_MODEM_STATE,
20 SMSM_Q6_STATE,
21 SMSM_APPS_DEM,
22 SMSM_WCNSS_STATE = SMSM_APPS_DEM,
23 SMSM_MODEM_DEM,
Jeff Hugo6a8057c2011-08-16 13:47:12 -060024 SMSM_DSPS_STATE = SMSM_MODEM_DEM,
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070025 SMSM_Q6_DEM,
26 SMSM_POWER_MASTER_DEM,
27 SMSM_TIME_MASTER_DEM,
28};
29extern uint32_t SMSM_NUM_ENTRIES;
30#else
31enum {
32 SMSM_APPS_STATE = 1,
33 SMSM_MODEM_STATE = 3,
34 SMSM_NUM_ENTRIES,
35};
36#endif
37
38enum {
39 SMSM_APPS,
40 SMSM_MODEM,
41 SMSM_Q6,
42 SMSM_WCNSS,
43 SMSM_DSPS,
44};
45extern uint32_t SMSM_NUM_HOSTS;
46
47#define SMSM_INIT 0x00000001
48#define SMSM_OSENTERED 0x00000002
49#define SMSM_SMDWAIT 0x00000004
50#define SMSM_SMDINIT 0x00000008
51#define SMSM_RPCWAIT 0x00000010
52#define SMSM_RPCINIT 0x00000020
53#define SMSM_RESET 0x00000040
54#define SMSM_RSA 0x00000080
55#define SMSM_RUN 0x00000100
56#define SMSM_PWRC 0x00000200
57#define SMSM_TIMEWAIT 0x00000400
58#define SMSM_TIMEINIT 0x00000800
59#define SMSM_PWRC_EARLY_EXIT 0x00001000
60#define SMSM_WFPI 0x00002000
61#define SMSM_SLEEP 0x00004000
62#define SMSM_SLEEPEXIT 0x00008000
63#define SMSM_OEMSBL_RELEASE 0x00010000
64#define SMSM_APPS_REBOOT 0x00020000
65#define SMSM_SYSTEM_POWER_DOWN 0x00040000
66#define SMSM_SYSTEM_REBOOT 0x00080000
67#define SMSM_SYSTEM_DOWNLOAD 0x00100000
68#define SMSM_PWRC_SUSPEND 0x00200000
69#define SMSM_APPS_SHUTDOWN 0x00400000
70#define SMSM_SMD_LOOPBACK 0x00800000
71#define SMSM_RUN_QUIET 0x01000000
72#define SMSM_MODEM_WAIT 0x02000000
73#define SMSM_MODEM_BREAK 0x04000000
74#define SMSM_MODEM_CONTINUE 0x08000000
75#define SMSM_SYSTEM_REBOOT_USR 0x20000000
76#define SMSM_SYSTEM_PWRDWN_USR 0x40000000
77#define SMSM_UNKNOWN 0x80000000
78
79#define SMSM_WKUP_REASON_RPC 0x00000001
80#define SMSM_WKUP_REASON_INT 0x00000002
81#define SMSM_WKUP_REASON_GPIO 0x00000004
82#define SMSM_WKUP_REASON_TIMER 0x00000008
83#define SMSM_WKUP_REASON_ALARM 0x00000010
84#define SMSM_WKUP_REASON_RESET 0x00000020
85
Eric Holmberg7ab6a9c2011-07-22 17:16:34 -060086#define SMSM_VENDOR 0x00020000
87
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070088#define SMSM_A2_POWER_CONTROL 0x00000002
Angshuman Sarkar402014d2011-08-12 15:29:31 +053089#define SMSM_A2_POWER_CONTROL_ACK 0x00000800
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070090
91#define SMSM_WLAN_TX_RINGS_EMPTY 0x00000200
92#define SMSM_WLAN_TX_ENABLE 0x00000400
93
94
95void *smem_alloc(unsigned id, unsigned size);
Angshuman Sarkar4eade0d2011-08-17 14:06:23 +053096void *smem_alloc2(unsigned id, unsigned size_in);
Bryan Huntsman3f2bc4d2011-08-16 17:27:22 -070097void *smem_get_entry(unsigned id, unsigned *size);
98int smsm_change_state(uint32_t smsm_entry,
99 uint32_t clear_mask, uint32_t set_mask);
100int smsm_change_intr_mask(uint32_t smsm_entry,
101 uint32_t clear_mask, uint32_t set_mask);
102int smsm_get_intr_mask(uint32_t smsm_entry, uint32_t *intr_mask);
103uint32_t smsm_get_state(uint32_t smsm_entry);
104int smsm_state_cb_register(uint32_t smsm_entry, uint32_t mask,
105 void (*notify)(void *, uint32_t old_state, uint32_t new_state),
106 void *data);
107int smsm_state_cb_deregister(uint32_t smsm_entry, uint32_t mask,
108 void (*notify)(void *, uint32_t, uint32_t), void *data);
109void smsm_print_sleep_info(uint32_t sleep_delay, uint32_t sleep_limit,
110 uint32_t irq_mask, uint32_t wakeup_reason, uint32_t pending_irqs);
111void smsm_reset_modem(unsigned mode);
112void smsm_reset_modem_cont(void);
113void smd_sleep_exit(void);
114
115#define SMEM_NUM_SMD_STREAM_CHANNELS 64
116#define SMEM_NUM_SMD_BLOCK_CHANNELS 64
117
118enum {
119 /* fixed items */
120 SMEM_PROC_COMM = 0,
121 SMEM_HEAP_INFO,
122 SMEM_ALLOCATION_TABLE,
123 SMEM_VERSION_INFO,
124 SMEM_HW_RESET_DETECT,
125 SMEM_AARM_WARM_BOOT,
126 SMEM_DIAG_ERR_MESSAGE,
127 SMEM_SPINLOCK_ARRAY,
128 SMEM_MEMORY_BARRIER_LOCATION,
129 SMEM_FIXED_ITEM_LAST = SMEM_MEMORY_BARRIER_LOCATION,
130
131 /* dynamic items */
132 SMEM_AARM_PARTITION_TABLE,
133 SMEM_AARM_BAD_BLOCK_TABLE,
134 SMEM_RESERVE_BAD_BLOCKS,
135 SMEM_WM_UUID,
136 SMEM_CHANNEL_ALLOC_TBL,
137 SMEM_SMD_BASE_ID,
138 SMEM_SMEM_LOG_IDX = SMEM_SMD_BASE_ID + SMEM_NUM_SMD_STREAM_CHANNELS,
139 SMEM_SMEM_LOG_EVENTS,
140 SMEM_SMEM_STATIC_LOG_IDX,
141 SMEM_SMEM_STATIC_LOG_EVENTS,
142 SMEM_SMEM_SLOW_CLOCK_SYNC,
143 SMEM_SMEM_SLOW_CLOCK_VALUE,
144 SMEM_BIO_LED_BUF,
145 SMEM_SMSM_SHARED_STATE,
146 SMEM_SMSM_INT_INFO,
147 SMEM_SMSM_SLEEP_DELAY,
148 SMEM_SMSM_LIMIT_SLEEP,
149 SMEM_SLEEP_POWER_COLLAPSE_DISABLED,
150 SMEM_KEYPAD_KEYS_PRESSED,
151 SMEM_KEYPAD_STATE_UPDATED,
152 SMEM_KEYPAD_STATE_IDX,
153 SMEM_GPIO_INT,
154 SMEM_MDDI_LCD_IDX,
155 SMEM_MDDI_HOST_DRIVER_STATE,
156 SMEM_MDDI_LCD_DISP_STATE,
157 SMEM_LCD_CUR_PANEL,
158 SMEM_MARM_BOOT_SEGMENT_INFO,
159 SMEM_AARM_BOOT_SEGMENT_INFO,
160 SMEM_SLEEP_STATIC,
161 SMEM_SCORPION_FREQUENCY,
162 SMEM_SMD_PROFILES,
163 SMEM_TSSC_BUSY,
164 SMEM_HS_SUSPEND_FILTER_INFO,
165 SMEM_BATT_INFO,
166 SMEM_APPS_BOOT_MODE,
167 SMEM_VERSION_FIRST,
168 SMEM_VERSION_SMD = SMEM_VERSION_FIRST,
169 SMEM_VERSION_LAST = SMEM_VERSION_FIRST + 24,
170 SMEM_OSS_RRCASN1_BUF1,
171 SMEM_OSS_RRCASN1_BUF2,
172 SMEM_ID_VENDOR0,
173 SMEM_ID_VENDOR1,
174 SMEM_ID_VENDOR2,
175 SMEM_HW_SW_BUILD_ID,
176 SMEM_SMD_BLOCK_PORT_BASE_ID,
177 SMEM_SMD_BLOCK_PORT_PROC0_HEAP = SMEM_SMD_BLOCK_PORT_BASE_ID +
178 SMEM_NUM_SMD_BLOCK_CHANNELS,
179 SMEM_SMD_BLOCK_PORT_PROC1_HEAP = SMEM_SMD_BLOCK_PORT_PROC0_HEAP +
180 SMEM_NUM_SMD_BLOCK_CHANNELS,
181 SMEM_I2C_MUTEX = SMEM_SMD_BLOCK_PORT_PROC1_HEAP +
182 SMEM_NUM_SMD_BLOCK_CHANNELS,
183 SMEM_SCLK_CONVERSION,
184 SMEM_SMD_SMSM_INTR_MUX,
185 SMEM_SMSM_CPU_INTR_MASK,
186 SMEM_APPS_DEM_SLAVE_DATA,
187 SMEM_QDSP6_DEM_SLAVE_DATA,
188 SMEM_CLKREGIM_BSP,
189 SMEM_CLKREGIM_SOURCES,
190 SMEM_SMD_FIFO_BASE_ID,
191 SMEM_USABLE_RAM_PARTITION_TABLE = SMEM_SMD_FIFO_BASE_ID +
192 SMEM_NUM_SMD_STREAM_CHANNELS,
193 SMEM_POWER_ON_STATUS_INFO,
194 SMEM_DAL_AREA,
195 SMEM_SMEM_LOG_POWER_IDX,
196 SMEM_SMEM_LOG_POWER_WRAP,
197 SMEM_SMEM_LOG_POWER_EVENTS,
198 SMEM_ERR_CRASH_LOG,
199 SMEM_ERR_F3_TRACE_LOG,
200 SMEM_SMD_BRIDGE_ALLOC_TABLE,
201 SMEM_SMDLITE_TABLE,
202 SMEM_SD_IMG_UPGRADE_STATUS,
203 SMEM_SEFS_INFO,
204 SMEM_RESET_LOG,
205 SMEM_RESET_LOG_SYMBOLS,
206 SMEM_MODEM_SW_BUILD_ID,
207 SMEM_SMEM_LOG_MPROC_WRAP,
208 SMEM_BOOT_INFO_FOR_APPS,
209 SMEM_SMSM_SIZE_INFO,
210 SMEM_MEM_LAST = SMEM_SMSM_SIZE_INFO,
211 SMEM_NUM_ITEMS,
212};
213
214enum {
215 SMEM_APPS_Q6_SMSM = 3,
216 SMEM_Q6_APPS_SMSM = 5,
217 SMSM_NUM_INTR_MUX = 8,
218};
219
220int smsm_check_for_modem_crash(void);
221void *smem_find(unsigned id, unsigned size);
222void *smem_get_entry(unsigned id, unsigned *size);
223
224#endif