| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 1 | /* arch/arm/mach-msm/smd_private.h | 
 | 2 |  * | 
 | 3 |  * Copyright (C) 2007 Google, Inc. | 
| Duy Truong | e833aca | 2013-02-12 13:35:08 -0800 | [diff] [blame] | 4 |  * Copyright (c) 2007-2012, The Linux Foundation. All rights reserved. | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 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 |  | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 19 | #include <linux/types.h> | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 20 | #include <linux/spinlock.h> | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 21 | #include <mach/msm_smsm.h> | 
| Eric Holmberg | 7ad623a | 2012-03-01 14:41:10 -0700 | [diff] [blame] | 22 | #include <mach/msm_smd.h> | 
| Daniel Walker | 74df1d0 | 2010-03-17 10:51:10 -0700 | [diff] [blame] | 23 |  | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 24 | #define PC_APPS  0 | 
 | 25 | #define PC_MODEM 1 | 
 | 26 |  | 
 | 27 | #define VERSION_QDSP6     4 | 
 | 28 | #define VERSION_APPS_SBL  6 | 
 | 29 | #define VERSION_MODEM_SBL 7 | 
 | 30 | #define VERSION_APPS      8 | 
 | 31 | #define VERSION_MODEM     9 | 
 | 32 | #define VERSION_DSPS      10 | 
 | 33 |  | 
 | 34 | #define SMD_HEAP_SIZE 512 | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 35 |  | 
| Daniel Walker | 79848a2 | 2010-03-16 15:20:07 -0700 | [diff] [blame] | 36 | struct smem_heap_info { | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 37 | 	unsigned initialized; | 
 | 38 | 	unsigned free_offset; | 
 | 39 | 	unsigned heap_remaining; | 
 | 40 | 	unsigned reserved; | 
 | 41 | }; | 
 | 42 |  | 
| Daniel Walker | 79848a2 | 2010-03-16 15:20:07 -0700 | [diff] [blame] | 43 | struct smem_heap_entry { | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 44 | 	unsigned allocated; | 
 | 45 | 	unsigned offset; | 
 | 46 | 	unsigned size; | 
| Jeff Hugo | bdc734d | 2012-03-26 16:05:39 -0600 | [diff] [blame] | 47 | 	unsigned reserved; /* bits 1:0 reserved, bits 31:2 aux smem base addr */ | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 48 | }; | 
| Jeff Hugo | bdc734d | 2012-03-26 16:05:39 -0600 | [diff] [blame] | 49 | #define BASE_ADDR_MASK 0xfffffffc | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 50 |  | 
| Daniel Walker | 79848a2 | 2010-03-16 15:20:07 -0700 | [diff] [blame] | 51 | struct smem_proc_comm { | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 52 | 	unsigned command; | 
 | 53 | 	unsigned status; | 
 | 54 | 	unsigned data1; | 
 | 55 | 	unsigned data2; | 
 | 56 | }; | 
 | 57 |  | 
| Daniel Walker | 79848a2 | 2010-03-16 15:20:07 -0700 | [diff] [blame] | 58 | struct smem_shared { | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 59 | 	struct smem_proc_comm proc_comm[4]; | 
 | 60 | 	unsigned version[32]; | 
 | 61 | 	struct smem_heap_info heap_info; | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 62 | 	struct smem_heap_entry heap_toc[SMD_HEAP_SIZE]; | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 63 | }; | 
 | 64 |  | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 65 | #if defined(CONFIG_MSM_SMD_PKG4) | 
| Daniel Walker | 79848a2 | 2010-03-16 15:20:07 -0700 | [diff] [blame] | 66 | struct smsm_interrupt_info { | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 67 | 	uint32_t aArm_en_mask; | 
 | 68 | 	uint32_t aArm_interrupts_pending; | 
 | 69 | 	uint32_t aArm_wakeup_reason; | 
 | 70 | 	uint32_t aArm_rpc_prog; | 
 | 71 | 	uint32_t aArm_rpc_proc; | 
 | 72 | 	char aArm_smd_port_name[20]; | 
 | 73 | 	uint32_t aArm_gpio_info; | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 74 | }; | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 75 | #elif defined(CONFIG_MSM_SMD_PKG3) | 
 | 76 | struct smsm_interrupt_info { | 
 | 77 |   uint32_t aArm_en_mask; | 
 | 78 |   uint32_t aArm_interrupts_pending; | 
 | 79 |   uint32_t aArm_wakeup_reason; | 
 | 80 | }; | 
 | 81 | #elif !defined(CONFIG_MSM_SMD) | 
| Steve Muckle | f132c6c | 2012-06-06 18:30:57 -0700 | [diff] [blame] | 82 | /* Don't trigger the error */ | 
| Arve Hjønnevåg | ec9d3d1 | 2009-06-16 14:48:21 -0700 | [diff] [blame] | 83 | #else | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 84 | #error No SMD Package Specified; aborting | 
| Arve Hjønnevåg | ec9d3d1 | 2009-06-16 14:48:21 -0700 | [diff] [blame] | 85 | #endif | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 86 |  | 
 | 87 | #define SZ_DIAG_ERR_MSG 0xC8 | 
 | 88 | #define ID_DIAG_ERR_MSG SMEM_DIAG_ERR_MESSAGE | 
 | 89 | #define ID_SMD_CHANNELS SMEM_SMD_BASE_ID | 
 | 90 | #define ID_SHARED_STATE SMEM_SMSM_SHARED_STATE | 
 | 91 | #define ID_CH_ALLOC_TBL SMEM_CHANNEL_ALLOC_TBL | 
 | 92 |  | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 93 | #define SMD_SS_CLOSED            0x00000000 | 
 | 94 | #define SMD_SS_OPENING           0x00000001 | 
 | 95 | #define SMD_SS_OPENED            0x00000002 | 
 | 96 | #define SMD_SS_FLUSHING          0x00000003 | 
 | 97 | #define SMD_SS_CLOSING           0x00000004 | 
 | 98 | #define SMD_SS_RESET             0x00000005 | 
 | 99 | #define SMD_SS_RESET_OPENING     0x00000006 | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 100 |  | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 101 | #define SMD_BUF_SIZE             8192 | 
 | 102 | #define SMD_CHANNELS             64 | 
 | 103 | #define SMD_HEADER_SIZE          20 | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 104 |  | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 105 | /* 'type' field of smd_alloc_elm structure | 
 | 106 |  * has the following breakup | 
 | 107 |  * bits 0-7   -> channel type | 
 | 108 |  * bits 8-11  -> xfer type | 
 | 109 |  * bits 12-31 -> reserved | 
 | 110 |  */ | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 111 | struct smd_alloc_elm { | 
 | 112 | 	char name[20]; | 
 | 113 | 	uint32_t cid; | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 114 | 	uint32_t type; | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 115 | 	uint32_t ref_count; | 
 | 116 | }; | 
 | 117 |  | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 118 | #define SMD_CHANNEL_TYPE(x) ((x) & 0x000000FF) | 
 | 119 | #define SMD_XFER_TYPE(x)    (((x) & 0x00000F00) >> 8) | 
 | 120 |  | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 121 | struct smd_half_channel { | 
 | 122 | 	unsigned state; | 
 | 123 | 	unsigned char fDSR; | 
 | 124 | 	unsigned char fCTS; | 
 | 125 | 	unsigned char fCD; | 
 | 126 | 	unsigned char fRI; | 
 | 127 | 	unsigned char fHEAD; | 
 | 128 | 	unsigned char fTAIL; | 
 | 129 | 	unsigned char fSTATE; | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 130 | 	unsigned char fBLOCKREADINTR; | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 131 | 	unsigned tail; | 
 | 132 | 	unsigned head; | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 133 | }; | 
 | 134 |  | 
| Jeff Hugo | 918b2dc | 2012-03-21 13:42:09 -0600 | [diff] [blame] | 135 | struct smd_half_channel_word_access { | 
 | 136 | 	unsigned state; | 
 | 137 | 	unsigned fDSR; | 
 | 138 | 	unsigned fCTS; | 
 | 139 | 	unsigned fCD; | 
 | 140 | 	unsigned fRI; | 
 | 141 | 	unsigned fHEAD; | 
 | 142 | 	unsigned fTAIL; | 
 | 143 | 	unsigned fSTATE; | 
 | 144 | 	unsigned fBLOCKREADINTR; | 
 | 145 | 	unsigned tail; | 
 | 146 | 	unsigned head; | 
| Daniel Walker | 79848a2 | 2010-03-16 15:20:07 -0700 | [diff] [blame] | 147 | }; | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 148 |  | 
| Jeff Hugo | 918b2dc | 2012-03-21 13:42:09 -0600 | [diff] [blame] | 149 | struct smd_half_channel_access { | 
 | 150 | 	void (*set_state)(volatile void *half_channel, unsigned data); | 
 | 151 | 	unsigned (*get_state)(volatile void *half_channel); | 
 | 152 | 	void (*set_fDSR)(volatile void *half_channel, unsigned char data); | 
 | 153 | 	unsigned (*get_fDSR)(volatile void *half_channel); | 
 | 154 | 	void (*set_fCTS)(volatile void *half_channel, unsigned char data); | 
 | 155 | 	unsigned (*get_fCTS)(volatile void *half_channel); | 
 | 156 | 	void (*set_fCD)(volatile void *half_channel, unsigned char data); | 
 | 157 | 	unsigned (*get_fCD)(volatile void *half_channel); | 
 | 158 | 	void (*set_fRI)(volatile void *half_channel, unsigned char data); | 
 | 159 | 	unsigned (*get_fRI)(volatile void *half_channel); | 
 | 160 | 	void (*set_fHEAD)(volatile void *half_channel, unsigned char data); | 
 | 161 | 	unsigned (*get_fHEAD)(volatile void *half_channel); | 
 | 162 | 	void (*set_fTAIL)(volatile void *half_channel, unsigned char data); | 
 | 163 | 	unsigned (*get_fTAIL)(volatile void *half_channel); | 
 | 164 | 	void (*set_fSTATE)(volatile void *half_channel, unsigned char data); | 
 | 165 | 	unsigned (*get_fSTATE)(volatile void *half_channel); | 
 | 166 | 	void (*set_fBLOCKREADINTR)(volatile void *half_channel, | 
 | 167 | 					unsigned char data); | 
 | 168 | 	unsigned (*get_fBLOCKREADINTR)(volatile void *half_channel); | 
 | 169 | 	void (*set_tail)(volatile void *half_channel, unsigned data); | 
 | 170 | 	unsigned (*get_tail)(volatile void *half_channel); | 
 | 171 | 	void (*set_head)(volatile void *half_channel, unsigned data); | 
 | 172 | 	unsigned (*get_head)(volatile void *half_channel); | 
 | 173 | }; | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 174 |  | 
| Jeff Hugo | 918b2dc | 2012-03-21 13:42:09 -0600 | [diff] [blame] | 175 | int is_word_access_ch(unsigned ch_type); | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 176 |  | 
| Jeff Hugo | 918b2dc | 2012-03-21 13:42:09 -0600 | [diff] [blame] | 177 | struct smd_half_channel_access *get_half_ch_funcs(unsigned ch_type); | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 178 |  | 
| Naveen Ramaraj | 76483ad | 2011-09-06 14:25:44 -0700 | [diff] [blame] | 179 | struct smem_ram_ptn { | 
 | 180 | 	char name[16]; | 
 | 181 | 	unsigned start; | 
 | 182 | 	unsigned size; | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 183 |  | 
| Naveen Ramaraj | 76483ad | 2011-09-06 14:25:44 -0700 | [diff] [blame] | 184 | 	/* RAM Partition attribute: READ_ONLY, READWRITE etc.  */ | 
 | 185 | 	unsigned attr; | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 186 |  | 
| Naveen Ramaraj | 76483ad | 2011-09-06 14:25:44 -0700 | [diff] [blame] | 187 | 	/* RAM Partition category: EBI0, EBI1, IRAM, IMEM */ | 
 | 188 | 	unsigned category; | 
 | 189 |  | 
 | 190 | 	/* RAM Partition domain: APPS, MODEM, APPS & MODEM (SHARED) etc. */ | 
 | 191 | 	unsigned domain; | 
 | 192 |  | 
 | 193 | 	/* RAM Partition type: system, bootloader, appsboot, apps etc. */ | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 194 | 	unsigned type; | 
 | 195 |  | 
| Naveen Ramaraj | 76483ad | 2011-09-06 14:25:44 -0700 | [diff] [blame] | 196 | 	/* reserved for future expansion without changing version number */ | 
 | 197 | 	unsigned reserved2, reserved3, reserved4, reserved5; | 
 | 198 | } __attribute__ ((__packed__)); | 
 | 199 |  | 
 | 200 |  | 
 | 201 | struct smem_ram_ptable { | 
 | 202 | 	#define _SMEM_RAM_PTABLE_MAGIC_1 0x9DA5E0A8 | 
 | 203 | 	#define _SMEM_RAM_PTABLE_MAGIC_2 0xAF9EC4E2 | 
 | 204 | 	unsigned magic[2]; | 
 | 205 | 	unsigned version; | 
 | 206 | 	unsigned reserved1; | 
 | 207 | 	unsigned len; | 
 | 208 | 	struct smem_ram_ptn parts[32]; | 
 | 209 | 	unsigned buf; | 
 | 210 | } __attribute__ ((__packed__)); | 
 | 211 |  | 
 | 212 | /* SMEM RAM Partition */ | 
 | 213 | enum { | 
 | 214 | 	DEFAULT_ATTRB = ~0x0, | 
 | 215 | 	READ_ONLY = 0x0, | 
 | 216 | 	READWRITE, | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 217 | }; | 
 | 218 |  | 
| Naveen Ramaraj | 76483ad | 2011-09-06 14:25:44 -0700 | [diff] [blame] | 219 | enum { | 
 | 220 | 	DEFAULT_CATEGORY = ~0x0, | 
 | 221 | 	SMI = 0x0, | 
 | 222 | 	EBI1, | 
 | 223 | 	EBI2, | 
 | 224 | 	QDSP6, | 
 | 225 | 	IRAM, | 
 | 226 | 	IMEM, | 
 | 227 | 	EBI0_CS0, | 
 | 228 | 	EBI0_CS1, | 
 | 229 | 	EBI1_CS0, | 
 | 230 | 	EBI1_CS1, | 
 | 231 | 	SDRAM = 0xE, | 
 | 232 | }; | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 233 |  | 
| Naveen Ramaraj | 76483ad | 2011-09-06 14:25:44 -0700 | [diff] [blame] | 234 | enum { | 
 | 235 | 	DEFAULT_DOMAIN = 0x0, | 
 | 236 | 	APPS_DOMAIN, | 
 | 237 | 	MODEM_DOMAIN, | 
 | 238 | 	SHARED_DOMAIN, | 
 | 239 | }; | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 240 |  | 
| Naveen Ramaraj | 76483ad | 2011-09-06 14:25:44 -0700 | [diff] [blame] | 241 | enum { | 
 | 242 | 	SYS_MEMORY = 1,        /* system memory*/ | 
 | 243 | 	BOOT_REGION_MEMORY1,   /* boot loader memory 1*/ | 
 | 244 | 	BOOT_REGION_MEMORY2,   /* boot loader memory 2,reserved*/ | 
 | 245 | 	APPSBL_MEMORY,         /* apps boot loader memory*/ | 
 | 246 | 	APPS_MEMORY,           /* apps  usage memory*/ | 
 | 247 | }; | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 248 |  | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 249 | extern spinlock_t smem_lock; | 
 | 250 |  | 
| Brian Swetland | 03e00cd | 2009-07-01 17:58:37 -0700 | [diff] [blame] | 251 |  | 
| Bryan Huntsman | 3f2bc4d | 2011-08-16 17:27:22 -0700 | [diff] [blame] | 252 | void smd_diag(void); | 
| Daniel Walker | 79848a2 | 2010-03-16 15:20:07 -0700 | [diff] [blame] | 253 |  | 
| Eric Holmberg | 7ad623a | 2012-03-01 14:41:10 -0700 | [diff] [blame] | 254 | struct interrupt_stat { | 
 | 255 | 	uint32_t smd_in_count; | 
 | 256 | 	uint32_t smd_out_hardcode_count; | 
 | 257 | 	uint32_t smd_out_config_count; | 
| Arun Kumar Neelakantam | 240be2e | 2012-10-16 22:17:55 +0530 | [diff] [blame] | 258 | 	uint32_t smd_interrupt_id; | 
| Daniel Walker | bf83de4 | 2010-03-16 16:29:44 -0700 | [diff] [blame] | 259 |  | 
| Eric Holmberg | 7ad623a | 2012-03-01 14:41:10 -0700 | [diff] [blame] | 260 | 	uint32_t smsm_in_count; | 
 | 261 | 	uint32_t smsm_out_hardcode_count; | 
 | 262 | 	uint32_t smsm_out_config_count; | 
| Arun Kumar Neelakantam | 240be2e | 2012-10-16 22:17:55 +0530 | [diff] [blame] | 263 | 	uint32_t smsm_interrupt_id; | 
| Eric Holmberg | 7ad623a | 2012-03-01 14:41:10 -0700 | [diff] [blame] | 264 | }; | 
 | 265 | extern struct interrupt_stat interrupt_stats[NUM_SMD_SUBSYSTEMS]; | 
| Daniel Walker | 74df1d0 | 2010-03-17 10:51:10 -0700 | [diff] [blame] | 266 |  | 
| Brian Swetland | 2eb44eb | 2008-09-29 16:00:48 -0700 | [diff] [blame] | 267 | #endif |