diff options
Diffstat (limited to 'arch/arm/mach-msm/smd_private.h')
-rw-r--r-- | arch/arm/mach-msm/smd_private.h | 403 |
1 files changed, 0 insertions, 403 deletions
diff --git a/arch/arm/mach-msm/smd_private.h b/arch/arm/mach-msm/smd_private.h deleted file mode 100644 index 727bfe68aa9b..000000000000 --- a/arch/arm/mach-msm/smd_private.h +++ /dev/null | |||
@@ -1,403 +0,0 @@ | |||
1 | /* arch/arm/mach-msm/smd_private.h | ||
2 | * | ||
3 | * Copyright (C) 2007 Google, Inc. | ||
4 | * Copyright (c) 2007 QUALCOMM Incorporated | ||
5 | * | ||
6 | * This software is licensed under the terms of the GNU General Public | ||
7 | * License version 2, as published by the Free Software Foundation, and | ||
8 | * may be copied, distributed, and modified under those terms. | ||
9 | * | ||
10 | * This program is distributed in the hope that it will be useful, | ||
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
13 | * GNU General Public License for more details. | ||
14 | * | ||
15 | */ | ||
16 | #ifndef _ARCH_ARM_MACH_MSM_MSM_SMD_PRIVATE_H_ | ||
17 | #define _ARCH_ARM_MACH_MSM_MSM_SMD_PRIVATE_H_ | ||
18 | |||
19 | #include <linux/platform_device.h> | ||
20 | #include <linux/spinlock.h> | ||
21 | #include <linux/list.h> | ||
22 | #include <linux/io.h> | ||
23 | |||
24 | #include <mach/msm_iomap.h> | ||
25 | |||
26 | struct smem_heap_info { | ||
27 | unsigned initialized; | ||
28 | unsigned free_offset; | ||
29 | unsigned heap_remaining; | ||
30 | unsigned reserved; | ||
31 | }; | ||
32 | |||
33 | struct smem_heap_entry { | ||
34 | unsigned allocated; | ||
35 | unsigned offset; | ||
36 | unsigned size; | ||
37 | unsigned reserved; | ||
38 | }; | ||
39 | |||
40 | struct smem_proc_comm { | ||
41 | unsigned command; | ||
42 | unsigned status; | ||
43 | unsigned data1; | ||
44 | unsigned data2; | ||
45 | }; | ||
46 | |||
47 | #define PC_APPS 0 | ||
48 | #define PC_MODEM 1 | ||
49 | |||
50 | #define VERSION_SMD 0 | ||
51 | #define VERSION_QDSP6 4 | ||
52 | #define VERSION_APPS_SBL 6 | ||
53 | #define VERSION_MODEM_SBL 7 | ||
54 | #define VERSION_APPS 8 | ||
55 | #define VERSION_MODEM 9 | ||
56 | |||
57 | struct smem_shared { | ||
58 | struct smem_proc_comm proc_comm[4]; | ||
59 | unsigned version[32]; | ||
60 | struct smem_heap_info heap_info; | ||
61 | struct smem_heap_entry heap_toc[512]; | ||
62 | }; | ||
63 | |||
64 | #define SMSM_V1_SIZE (sizeof(unsigned) * 8) | ||
65 | #define SMSM_V2_SIZE (sizeof(unsigned) * 4) | ||
66 | |||
67 | #ifdef CONFIG_MSM_SMD_PKG3 | ||
68 | struct smsm_interrupt_info { | ||
69 | uint32_t interrupt_mask; | ||
70 | uint32_t pending_interrupts; | ||
71 | uint32_t wakeup_reason; | ||
72 | }; | ||
73 | #else | ||
74 | #define DEM_MAX_PORT_NAME_LEN (20) | ||
75 | struct msm_dem_slave_data { | ||
76 | uint32_t sleep_time; | ||
77 | uint32_t interrupt_mask; | ||
78 | uint32_t resources_used; | ||
79 | uint32_t reserved1; | ||
80 | |||
81 | uint32_t wakeup_reason; | ||
82 | uint32_t pending_interrupts; | ||
83 | uint32_t rpc_prog; | ||
84 | uint32_t rpc_proc; | ||
85 | char smd_port_name[DEM_MAX_PORT_NAME_LEN]; | ||
86 | uint32_t reserved2; | ||
87 | }; | ||
88 | #endif | ||
89 | |||
90 | #define SZ_DIAG_ERR_MSG 0xC8 | ||
91 | #define ID_DIAG_ERR_MSG SMEM_DIAG_ERR_MESSAGE | ||
92 | #define ID_SMD_CHANNELS SMEM_SMD_BASE_ID | ||
93 | #define ID_SHARED_STATE SMEM_SMSM_SHARED_STATE | ||
94 | #define ID_CH_ALLOC_TBL SMEM_CHANNEL_ALLOC_TBL | ||
95 | |||
96 | #define SMSM_INIT 0x00000001 | ||
97 | #define SMSM_SMDINIT 0x00000008 | ||
98 | #define SMSM_RPCINIT 0x00000020 | ||
99 | #define SMSM_RESET 0x00000040 | ||
100 | #define SMSM_RSA 0x00000080 | ||
101 | #define SMSM_RUN 0x00000100 | ||
102 | #define SMSM_PWRC 0x00000200 | ||
103 | #define SMSM_TIMEWAIT 0x00000400 | ||
104 | #define SMSM_TIMEINIT 0x00000800 | ||
105 | #define SMSM_PWRC_EARLY_EXIT 0x00001000 | ||
106 | #define SMSM_WFPI 0x00002000 | ||
107 | #define SMSM_SLEEP 0x00004000 | ||
108 | #define SMSM_SLEEPEXIT 0x00008000 | ||
109 | #define SMSM_APPS_REBOOT 0x00020000 | ||
110 | #define SMSM_SYSTEM_POWER_DOWN 0x00040000 | ||
111 | #define SMSM_SYSTEM_REBOOT 0x00080000 | ||
112 | #define SMSM_SYSTEM_DOWNLOAD 0x00100000 | ||
113 | #define SMSM_PWRC_SUSPEND 0x00200000 | ||
114 | #define SMSM_APPS_SHUTDOWN 0x00400000 | ||
115 | #define SMSM_SMD_LOOPBACK 0x00800000 | ||
116 | #define SMSM_RUN_QUIET 0x01000000 | ||
117 | #define SMSM_MODEM_WAIT 0x02000000 | ||
118 | #define SMSM_MODEM_BREAK 0x04000000 | ||
119 | #define SMSM_MODEM_CONTINUE 0x08000000 | ||
120 | #define SMSM_UNKNOWN 0x80000000 | ||
121 | |||
122 | #define SMSM_WKUP_REASON_RPC 0x00000001 | ||
123 | #define SMSM_WKUP_REASON_INT 0x00000002 | ||
124 | #define SMSM_WKUP_REASON_GPIO 0x00000004 | ||
125 | #define SMSM_WKUP_REASON_TIMER 0x00000008 | ||
126 | #define SMSM_WKUP_REASON_ALARM 0x00000010 | ||
127 | #define SMSM_WKUP_REASON_RESET 0x00000020 | ||
128 | |||
129 | #ifdef CONFIG_ARCH_MSM7X00A | ||
130 | enum smsm_state_item { | ||
131 | SMSM_STATE_APPS = 1, | ||
132 | SMSM_STATE_MODEM = 3, | ||
133 | SMSM_STATE_COUNT, | ||
134 | }; | ||
135 | #else | ||
136 | enum smsm_state_item { | ||
137 | SMSM_STATE_APPS, | ||
138 | SMSM_STATE_MODEM, | ||
139 | SMSM_STATE_HEXAGON, | ||
140 | SMSM_STATE_APPS_DEM, | ||
141 | SMSM_STATE_MODEM_DEM, | ||
142 | SMSM_STATE_QDSP6_DEM, | ||
143 | SMSM_STATE_POWER_MASTER_DEM, | ||
144 | SMSM_STATE_TIME_MASTER_DEM, | ||
145 | SMSM_STATE_COUNT, | ||
146 | }; | ||
147 | #endif | ||
148 | |||
149 | void *smem_alloc(unsigned id, unsigned size); | ||
150 | int smsm_change_state(enum smsm_state_item item, uint32_t clear_mask, uint32_t set_mask); | ||
151 | uint32_t smsm_get_state(enum smsm_state_item item); | ||
152 | int smsm_set_sleep_duration(uint32_t delay); | ||
153 | void smsm_print_sleep_info(void); | ||
154 | |||
155 | #define SMEM_NUM_SMD_CHANNELS 64 | ||
156 | |||
157 | typedef enum { | ||
158 | /* fixed items */ | ||
159 | SMEM_PROC_COMM = 0, | ||
160 | SMEM_HEAP_INFO, | ||
161 | SMEM_ALLOCATION_TABLE, | ||
162 | SMEM_VERSION_INFO, | ||
163 | SMEM_HW_RESET_DETECT, | ||
164 | SMEM_AARM_WARM_BOOT, | ||
165 | SMEM_DIAG_ERR_MESSAGE, | ||
166 | SMEM_SPINLOCK_ARRAY, | ||
167 | SMEM_MEMORY_BARRIER_LOCATION, | ||
168 | |||
169 | /* dynamic items */ | ||
170 | SMEM_AARM_PARTITION_TABLE, | ||
171 | SMEM_AARM_BAD_BLOCK_TABLE, | ||
172 | SMEM_RESERVE_BAD_BLOCKS, | ||
173 | SMEM_WM_UUID, | ||
174 | SMEM_CHANNEL_ALLOC_TBL, | ||
175 | SMEM_SMD_BASE_ID, | ||
176 | SMEM_SMEM_LOG_IDX = SMEM_SMD_BASE_ID + SMEM_NUM_SMD_CHANNELS, | ||
177 | SMEM_SMEM_LOG_EVENTS, | ||
178 | SMEM_SMEM_STATIC_LOG_IDX, | ||
179 | SMEM_SMEM_STATIC_LOG_EVENTS, | ||
180 | SMEM_SMEM_SLOW_CLOCK_SYNC, | ||
181 | SMEM_SMEM_SLOW_CLOCK_VALUE, | ||
182 | SMEM_BIO_LED_BUF, | ||
183 | SMEM_SMSM_SHARED_STATE, | ||
184 | SMEM_SMSM_INT_INFO, | ||
185 | SMEM_SMSM_SLEEP_DELAY, | ||
186 | SMEM_SMSM_LIMIT_SLEEP, | ||
187 | SMEM_SLEEP_POWER_COLLAPSE_DISABLED, | ||
188 | SMEM_KEYPAD_KEYS_PRESSED, | ||
189 | SMEM_KEYPAD_STATE_UPDATED, | ||
190 | SMEM_KEYPAD_STATE_IDX, | ||
191 | SMEM_GPIO_INT, | ||
192 | SMEM_MDDI_LCD_IDX, | ||
193 | SMEM_MDDI_HOST_DRIVER_STATE, | ||
194 | SMEM_MDDI_LCD_DISP_STATE, | ||
195 | SMEM_LCD_CUR_PANEL, | ||
196 | SMEM_MARM_BOOT_SEGMENT_INFO, | ||
197 | SMEM_AARM_BOOT_SEGMENT_INFO, | ||
198 | SMEM_SLEEP_STATIC, | ||
199 | SMEM_SCORPION_FREQUENCY, | ||
200 | SMEM_SMD_PROFILES, | ||
201 | SMEM_TSSC_BUSY, | ||
202 | SMEM_HS_SUSPEND_FILTER_INFO, | ||
203 | SMEM_BATT_INFO, | ||
204 | SMEM_APPS_BOOT_MODE, | ||
205 | SMEM_VERSION_FIRST, | ||
206 | SMEM_VERSION_LAST = SMEM_VERSION_FIRST + 24, | ||
207 | SMEM_OSS_RRCASN1_BUF1, | ||
208 | SMEM_OSS_RRCASN1_BUF2, | ||
209 | SMEM_ID_VENDOR0, | ||
210 | SMEM_ID_VENDOR1, | ||
211 | SMEM_ID_VENDOR2, | ||
212 | SMEM_HW_SW_BUILD_ID, | ||
213 | SMEM_SMD_BLOCK_PORT_BASE_ID, | ||
214 | SMEM_SMD_BLOCK_PORT_PROC0_HEAP = SMEM_SMD_BLOCK_PORT_BASE_ID + SMEM_NUM_SMD_CHANNELS, | ||
215 | SMEM_SMD_BLOCK_PORT_PROC1_HEAP = SMEM_SMD_BLOCK_PORT_PROC0_HEAP + SMEM_NUM_SMD_CHANNELS, | ||
216 | SMEM_I2C_MUTEX = SMEM_SMD_BLOCK_PORT_PROC1_HEAP + SMEM_NUM_SMD_CHANNELS, | ||
217 | SMEM_SCLK_CONVERSION, | ||
218 | SMEM_SMD_SMSM_INTR_MUX, | ||
219 | SMEM_SMSM_CPU_INTR_MASK, | ||
220 | SMEM_APPS_DEM_SLAVE_DATA, | ||
221 | SMEM_QDSP6_DEM_SLAVE_DATA, | ||
222 | SMEM_CLKREGIM_BSP, | ||
223 | SMEM_CLKREGIM_SOURCES, | ||
224 | SMEM_SMD_FIFO_BASE_ID, | ||
225 | SMEM_USABLE_RAM_PARTITION_TABLE = SMEM_SMD_FIFO_BASE_ID + SMEM_NUM_SMD_CHANNELS, | ||
226 | SMEM_POWER_ON_STATUS_INFO, | ||
227 | SMEM_DAL_AREA, | ||
228 | SMEM_SMEM_LOG_POWER_IDX, | ||
229 | SMEM_SMEM_LOG_POWER_WRAP, | ||
230 | SMEM_SMEM_LOG_POWER_EVENTS, | ||
231 | SMEM_ERR_CRASH_LOG, | ||
232 | SMEM_ERR_F3_TRACE_LOG, | ||
233 | SMEM_NUM_ITEMS, | ||
234 | } smem_mem_type; | ||
235 | |||
236 | |||
237 | #define SMD_SS_CLOSED 0x00000000 | ||
238 | #define SMD_SS_OPENING 0x00000001 | ||
239 | #define SMD_SS_OPENED 0x00000002 | ||
240 | #define SMD_SS_FLUSHING 0x00000003 | ||
241 | #define SMD_SS_CLOSING 0x00000004 | ||
242 | #define SMD_SS_RESET 0x00000005 | ||
243 | #define SMD_SS_RESET_OPENING 0x00000006 | ||
244 | |||
245 | #define SMD_BUF_SIZE 8192 | ||
246 | #define SMD_CHANNELS 64 | ||
247 | |||
248 | #define SMD_HEADER_SIZE 20 | ||
249 | |||
250 | struct smd_alloc_elm { | ||
251 | char name[20]; | ||
252 | uint32_t cid; | ||
253 | uint32_t ctype; | ||
254 | uint32_t ref_count; | ||
255 | }; | ||
256 | |||
257 | struct smd_half_channel { | ||
258 | unsigned state; | ||
259 | unsigned char fDSR; | ||
260 | unsigned char fCTS; | ||
261 | unsigned char fCD; | ||
262 | unsigned char fRI; | ||
263 | unsigned char fHEAD; | ||
264 | unsigned char fTAIL; | ||
265 | unsigned char fSTATE; | ||
266 | unsigned char fUNUSED; | ||
267 | unsigned tail; | ||
268 | unsigned head; | ||
269 | } __attribute__(( aligned(4), packed )); | ||
270 | |||
271 | /* Only used on SMD package v3 on msm7201a */ | ||
272 | struct smd_shared_v1 { | ||
273 | struct smd_half_channel ch0; | ||
274 | unsigned char data0[SMD_BUF_SIZE]; | ||
275 | struct smd_half_channel ch1; | ||
276 | unsigned char data1[SMD_BUF_SIZE]; | ||
277 | }; | ||
278 | |||
279 | /* Used on SMD package v4 */ | ||
280 | struct smd_shared_v2 { | ||
281 | struct smd_half_channel ch0; | ||
282 | struct smd_half_channel ch1; | ||
283 | }; | ||
284 | |||
285 | struct smd_channel { | ||
286 | volatile struct smd_half_channel *send; | ||
287 | volatile struct smd_half_channel *recv; | ||
288 | unsigned char *send_data; | ||
289 | unsigned char *recv_data; | ||
290 | |||
291 | unsigned fifo_mask; | ||
292 | unsigned fifo_size; | ||
293 | unsigned current_packet; | ||
294 | unsigned n; | ||
295 | |||
296 | struct list_head ch_list; | ||
297 | |||
298 | void *priv; | ||
299 | void (*notify)(void *priv, unsigned flags); | ||
300 | |||
301 | int (*read)(struct smd_channel *ch, void *data, int len); | ||
302 | int (*write)(struct smd_channel *ch, const void *data, int len); | ||
303 | int (*read_avail)(struct smd_channel *ch); | ||
304 | int (*write_avail)(struct smd_channel *ch); | ||
305 | |||
306 | void (*update_state)(struct smd_channel *ch); | ||
307 | unsigned last_state; | ||
308 | void (*notify_other_cpu)(void); | ||
309 | unsigned type; | ||
310 | |||
311 | char name[32]; | ||
312 | struct platform_device pdev; | ||
313 | }; | ||
314 | |||
315 | #define SMD_TYPE_MASK 0x0FF | ||
316 | #define SMD_TYPE_APPS_MODEM 0x000 | ||
317 | #define SMD_TYPE_APPS_DSP 0x001 | ||
318 | #define SMD_TYPE_MODEM_DSP 0x002 | ||
319 | |||
320 | #define SMD_KIND_MASK 0xF00 | ||
321 | #define SMD_KIND_UNKNOWN 0x000 | ||
322 | #define SMD_KIND_STREAM 0x100 | ||
323 | #define SMD_KIND_PACKET 0x200 | ||
324 | |||
325 | extern struct list_head smd_ch_closed_list; | ||
326 | extern struct list_head smd_ch_list_modem; | ||
327 | extern struct list_head smd_ch_list_dsp; | ||
328 | |||
329 | extern spinlock_t smd_lock; | ||
330 | extern spinlock_t smem_lock; | ||
331 | |||
332 | void *smem_find(unsigned id, unsigned size); | ||
333 | void *smem_item(unsigned id, unsigned *size); | ||
334 | uint32_t raw_smsm_get_state(enum smsm_state_item item); | ||
335 | |||
336 | extern void msm_init_last_radio_log(struct module *); | ||
337 | |||
338 | #ifdef CONFIG_MSM_SMD_PKG3 | ||
339 | /* | ||
340 | * This allocator assumes an SMD Package v3 which only exists on | ||
341 | * MSM7x00 SoC's. | ||
342 | */ | ||
343 | static inline int _smd_alloc_channel(struct smd_channel *ch) | ||
344 | { | ||
345 | struct smd_shared_v1 *shared1; | ||
346 | |||
347 | shared1 = smem_alloc(ID_SMD_CHANNELS + ch->n, sizeof(*shared1)); | ||
348 | if (!shared1) { | ||
349 | pr_err("smd_alloc_channel() cid %d does not exist\n", ch->n); | ||
350 | return -1; | ||
351 | } | ||
352 | ch->send = &shared1->ch0; | ||
353 | ch->recv = &shared1->ch1; | ||
354 | ch->send_data = shared1->data0; | ||
355 | ch->recv_data = shared1->data1; | ||
356 | ch->fifo_size = SMD_BUF_SIZE; | ||
357 | return 0; | ||
358 | } | ||
359 | #else | ||
360 | /* | ||
361 | * This allocator assumes an SMD Package v4, the most common | ||
362 | * and the default. | ||
363 | */ | ||
364 | static inline int _smd_alloc_channel(struct smd_channel *ch) | ||
365 | { | ||
366 | struct smd_shared_v2 *shared2; | ||
367 | void *buffer; | ||
368 | unsigned buffer_sz; | ||
369 | |||
370 | shared2 = smem_alloc(SMEM_SMD_BASE_ID + ch->n, sizeof(*shared2)); | ||
371 | buffer = smem_item(SMEM_SMD_FIFO_BASE_ID + ch->n, &buffer_sz); | ||
372 | |||
373 | if (!buffer) | ||
374 | return -1; | ||
375 | |||
376 | /* buffer must be a power-of-two size */ | ||
377 | if (buffer_sz & (buffer_sz - 1)) | ||
378 | return -1; | ||
379 | |||
380 | buffer_sz /= 2; | ||
381 | ch->send = &shared2->ch0; | ||
382 | ch->recv = &shared2->ch1; | ||
383 | ch->send_data = buffer; | ||
384 | ch->recv_data = buffer + buffer_sz; | ||
385 | ch->fifo_size = buffer_sz; | ||
386 | return 0; | ||
387 | } | ||
388 | #endif /* CONFIG_MSM_SMD_PKG3 */ | ||
389 | |||
390 | #if defined(CONFIG_ARCH_MSM7X30) | ||
391 | static inline void msm_a2m_int(uint32_t irq) | ||
392 | { | ||
393 | writel(1 << irq, MSM_GCC_BASE + 0x8); | ||
394 | } | ||
395 | #else | ||
396 | static inline void msm_a2m_int(uint32_t irq) | ||
397 | { | ||
398 | writel(1, MSM_CSR_BASE + 0x400 + (irq * 4)); | ||
399 | } | ||
400 | #endif /* CONFIG_ARCH_MSM7X30 */ | ||
401 | |||
402 | |||
403 | #endif | ||