mt_ccci_common.h 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990
  1. #ifndef __MT_CCCI_COMMON_H__
  2. #define __MT_CCCI_COMMON_H__
  3. #include <asm/io.h>
  4. #include <asm/setup.h>
  5. /*
  6. * all code owned by CCCI should use modem index starts from ZERO
  7. */
  8. typedef enum {
  9. MD_SYS1 = 0, /* MD SYS name counts from 1, but internal index counts from 0 */
  10. MD_SYS2,
  11. MD_SYS3,
  12. MD_SYS4,
  13. MD_SYS5 = 4,
  14. MAX_MD_NUM
  15. } MD_SYS;
  16. /* Meta parsing section */
  17. #define MD1_EN (1<<0)
  18. #define MD2_EN (1<<1)
  19. #define MD3_EN (1<<2)
  20. #define MD5_EN (1<<4)
  21. #define MD_2G_FLAG (1<<0)
  22. #define MD_FDD_FLAG (1<<1)
  23. #define MD_TDD_FLAG (1<<2)
  24. #define MD_LTE_FLAG (1<<3)
  25. #define MD_SGLTE_FLAG (1<<4)
  26. #define MD_WG_FLAG (MD_FDD_FLAG|MD_2G_FLAG)
  27. #define MD_TG_FLAG (MD_TDD_FLAG|MD_2G_FLAG)
  28. #define MD_LWG_FLAG (MD_LTE_FLAG|MD_FDD_FLAG|MD_2G_FLAG)
  29. #define MD_LTG_FLAG (MD_LTE_FLAG|MD_TDD_FLAG|MD_2G_FLAG)
  30. /* MD type defination */
  31. typedef enum {
  32. md_type_invalid = 0,
  33. modem_2g = 1,
  34. modem_3g,
  35. modem_wg,
  36. modem_tg,
  37. modem_lwg,
  38. modem_ltg,
  39. modem_sglte,
  40. modem_ultg,
  41. modem_ulwg,
  42. modem_ulwtg,
  43. modem_ulwcg,
  44. modem_ulwctg,
  45. modem_ulttg,
  46. modem_ulfwg,
  47. modem_ulfwcg,
  48. MAX_IMG_NUM = modem_ulfwcg /* this enum starts from 1 */
  49. } MD_LOAD_TYPE;
  50. /* MD logger configure file */
  51. #define MD1_LOGGER_FILE_PATH "/data/mdlog/mdlog1_config"
  52. #define MD2_LOGGER_FILE_PATH "/data/mdlog/mdlog2_config"
  53. /* Image string and header */
  54. /* image name/path */
  55. #define MOEDM_IMAGE_NAME "modem.img"
  56. #define DSP_IMAGE_NAME "DSP_ROM"
  57. #define CONFIG_MODEM_FIRMWARE_PATH "/etc/firmware/"
  58. #define CONFIG_MODEM_FIRMWARE_CIP_PATH "/custom/etc/firmware/"
  59. #define IMG_ERR_STR_LEN 64
  60. /* image header constants */
  61. #define MD_HEADER_MAGIC_NO "CHECK_HEADER"
  62. #define DEBUG_STR "Debug"
  63. #define RELEASE_STR "Release"
  64. #define INVALID_STR "INVALID"
  65. struct ccci_header {
  66. u32 data[2]; /* do NOT assump data[1] is data length in Rx */
  67. /* #ifdef FEATURE_SEQ_CHECK_EN */
  68. u16 channel:16;
  69. u16 seq_num:15;
  70. u16 assert_bit:1;
  71. /* #else */
  72. /* u32 channel; */
  73. /* #endif */
  74. u32 reserved;
  75. } __packed; /* not necessary, but it's a good gesture, :) */
  76. /*do not modify this c2k structure, because we assume its total size is 32bit,
  77. and used as ccci_header's 'reserved' member*/
  78. struct c2k_ctrl_port_msg {
  79. unsigned char id_hi;
  80. unsigned char id_low;
  81. unsigned char chan_num;
  82. unsigned char option;
  83. } __packed; /* not necessary, but it's a good gesture, :) */
  84. struct md_check_header {
  85. unsigned char check_header[12]; /* magic number is "CHECK_HEADER"*/
  86. unsigned int header_verno; /* header structure version number */
  87. unsigned int product_ver; /* 0x0:invalid; 0x1:debug version; 0x2:release version */
  88. unsigned int image_type; /* 0x0:invalid; 0x1:2G modem; 0x2: 3G modem */
  89. unsigned char platform[16]; /* MT6573_S01 or MT6573_S02 */
  90. unsigned char build_time[64]; /* build time string */
  91. unsigned char build_ver[64]; /* project version, ex:11A_MD.W11.28 */
  92. unsigned char bind_sys_id; /* bind to md sys id, MD SYS1: 1, MD SYS2: 2 */
  93. unsigned char ext_attr; /* no shrink: 0, shrink: 1*/
  94. unsigned char reserved[2]; /* for reserved */
  95. unsigned int mem_size; /* md ROM/RAM image size requested by md */
  96. unsigned int md_img_size; /* md image size, exclude head size*/
  97. unsigned int reserved_info; /* for reserved */
  98. unsigned int size; /* the size of this structure */
  99. } __packed;
  100. struct md_check_header_v3 {
  101. unsigned char check_header[12]; /* magic number is "CHECK_HEADER"*/
  102. unsigned int header_verno; /* header structure version number */
  103. unsigned int product_ver; /* 0x0:invalid; 0x1:debug version; 0x2:release version */
  104. unsigned int image_type; /* 0x0:invalid; 0x1:2G modem; 0x2: 3G modem */
  105. unsigned char platform[16]; /* MT6573_S01 or MT6573_S02 */
  106. unsigned char build_time[64]; /* build time string */
  107. unsigned char build_ver[64]; /* project version, ex:11A_MD.W11.28 */
  108. unsigned char bind_sys_id; /* bind to md sys id, MD SYS1: 1, MD SYS2: 2, MD SYS5: 5 */
  109. unsigned char ext_attr; /* no shrink: 0, shrink: 1 */
  110. unsigned char reserved[2]; /* for reserved */
  111. unsigned int mem_size; /* md ROM/RAM image size requested by md */
  112. unsigned int md_img_size; /* md image size, exclude head size */
  113. unsigned int rpc_sec_mem_addr; /* RPC secure memory address */
  114. unsigned int dsp_img_offset;
  115. unsigned int dsp_img_size;
  116. unsigned char reserved2[88];
  117. unsigned int size; /* the size of this structure */
  118. } __packed;
  119. struct _md_regin_info {
  120. unsigned int region_offset;
  121. unsigned int region_size;
  122. };
  123. struct md_check_header_v4 {
  124. unsigned char check_header[12]; /* magic number is "CHECK_HEADER"*/
  125. unsigned int header_verno; /* header structure version number */
  126. unsigned int product_ver; /* 0x0:invalid; 0x1:debug version; 0x2:release version */
  127. unsigned int image_type; /* 0x0:invalid; 0x1:2G modem; 0x2: 3G modem */
  128. unsigned char platform[16]; /* MT6573_S01 or MT6573_S02 */
  129. unsigned char build_time[64]; /* build time string */
  130. unsigned char build_ver[64]; /* project version, ex:11A_MD.W11.28 */
  131. unsigned char bind_sys_id; /* bind to md sys id, MD SYS1: 1, MD SYS2: 2, MD SYS5: 5 */
  132. unsigned char ext_attr; /* no shrink: 0, shrink: 1 */
  133. unsigned char reserved[2]; /* for reserved */
  134. unsigned int mem_size; /* md ROM/RAM image size requested by md */
  135. unsigned int md_img_size; /* md image size, exclude head size */
  136. unsigned int rpc_sec_mem_addr; /* RPC secure memory address */
  137. unsigned int dsp_img_offset;
  138. unsigned int dsp_img_size;
  139. unsigned int region_num; /* total region number */
  140. struct _md_regin_info region_info[8]; /* max support 8 regions */
  141. unsigned int domain_attr[4]; /* max support 4 domain settings, each region has 4 control bits*/
  142. unsigned char reserved2[4];
  143. unsigned int size; /* the size of this structure */
  144. } __packed;
  145. struct md_check_header_v5 {
  146. unsigned char check_header[12]; /* magic number is "CHECK_HEADER"*/
  147. unsigned int header_verno; /* header structure version number */
  148. unsigned int product_ver; /* 0x0:invalid; 0x1:debug version; 0x2:release version */
  149. unsigned int image_type; /* 0x0:invalid; 0x1:2G modem; 0x2: 3G modem */
  150. unsigned char platform[16]; /* MT6573_S01 or MT6573_S02 */
  151. unsigned char build_time[64]; /* build time string */
  152. unsigned char build_ver[64]; /* project version, ex:11A_MD.W11.28 */
  153. unsigned char bind_sys_id; /* bind to md sys id, MD SYS1: 1, MD SYS2: 2, MD SYS5: 5 */
  154. unsigned char ext_attr; /* no shrink: 0, shrink: 1 */
  155. unsigned char reserved[2]; /* for reserved */
  156. unsigned int mem_size; /* md ROM/RAM image size requested by md */
  157. unsigned int md_img_size; /* md image size, exclude head size */
  158. unsigned int rpc_sec_mem_addr; /* RPC secure memory address */
  159. unsigned int dsp_img_offset;
  160. unsigned int dsp_img_size;
  161. unsigned int region_num; /* total region number */
  162. struct _md_regin_info region_info[8]; /* max support 8 regions */
  163. unsigned int domain_attr[4]; /* max support 4 domain settings, each region has 4 control bits*/
  164. unsigned int arm7_img_offset;
  165. unsigned int arm7_img_size;
  166. unsigned char reserved_1[56];
  167. unsigned int size; /* the size of this structure */
  168. } __packed;
  169. struct md_check_header_struct {
  170. unsigned char check_header[12]; /* magic number is "CHECK_HEADER"*/
  171. unsigned int header_verno; /* header structure version number */
  172. unsigned int product_ver; /* 0x0:invalid; 0x1:debug version; 0x2:release version */
  173. unsigned int image_type; /* 0x0:invalid; 0x1:2G modem; 0x2: 3G modem */
  174. unsigned char platform[16]; /* MT6573_S01 or MT6573_S02 */
  175. unsigned char build_time[64]; /* build time string */
  176. unsigned char build_ver[64]; /* project version, ex:11A_MD.W11.28 */
  177. unsigned char bind_sys_id; /* bind to md sys id, MD SYS1: 1, MD SYS2: 2 */
  178. unsigned char ext_attr; /* no shrink: 0, shrink: 1*/
  179. unsigned char reserved[2]; /* for reserved */
  180. unsigned int mem_size; /* md ROM/RAM image size requested by md */
  181. unsigned int md_img_size; /* md image size, exclude head size*/
  182. #if 0 /* no use now, we still use struct */
  183. union {
  184. struct {
  185. unsigned int reserved_info; /* for reserved */
  186. unsigned int size; /* the size of this structure */
  187. } v12;
  188. struct {
  189. unsigned int rpc_sec_mem_addr; /* RPC secure memory address */
  190. unsigned int dsp_img_offset;
  191. unsigned int dsp_img_size;
  192. unsigned char reserved2[88];
  193. unsigned int size; /* the size of this structure */
  194. } v3;
  195. struct {
  196. unsigned int rpc_sec_mem_addr; /* RPC secure memory address */
  197. unsigned int dsp_img_offset;
  198. unsigned int dsp_img_size;
  199. unsigned int region_num; /* total region number */
  200. struct _md_regin_info region_info[8]; /* max support 8 regions */
  201. unsigned int domain_attr[4]; /* max support 4 domain settings, each region has 4 control bits*/
  202. unsigned char reserved2[4];
  203. unsigned int size; /* the size of this structure */
  204. } v4;
  205. struct {
  206. unsigned int rpc_sec_mem_addr; /* RPC secure memory address */
  207. unsigned int dsp_img_offset;
  208. unsigned int dsp_img_size;
  209. unsigned int region_num; /* total region number */
  210. struct _md_regin_info region_info[8]; /* max support 8 regions */
  211. unsigned int domain_attr[4]; /* max support 4 domain settings, each region has 4 control bits*/
  212. unsigned int arm7_img_offset;
  213. unsigned int arm7_img_size;
  214. unsigned char reserved_1[56];
  215. unsigned int size; /* the size of this structure */
  216. } v5;
  217. } diff;
  218. #endif
  219. } __packed;
  220. /* ======================= */
  221. /* index id region_info */
  222. /* ----------------------------- */
  223. enum {
  224. /* MPU_REGION_INFO_ID_SEC_OS,
  225. MPU_REGION_INFO_ID_ATF,
  226. MPU_REGION_INFO_ID_SCP_OS,
  227. MPU_REGION_INFO_ID_MD1_SEC_SMEM,
  228. MPU_REGION_INFO_ID_MD2_SEC_SMEM,
  229. MPU_REGION_INFO_ID_MD1_SMEM,
  230. MPU_REGION_INFO_ID_MD2_SMEM,
  231. MPU_REGION_INFO_ID_MD1_MD2_SMEM, */
  232. MD_SET_REGION_MD1_ROM_DSP = 0,
  233. MD_SET_REGION_MD1_MCURW_HWRO,
  234. MD_SET_REGION_MD1_MCURO_HWRW,
  235. MD_SET_REGION_MD1_MCURW_HWRW,/* old dsp region */
  236. MD_SET_REGION_MD1_RW = 4,
  237. /* MPU_REGION_INFO_ID_MD2_ROM,
  238. MPU_REGION_INFO_ID_MD2_RW,
  239. MPU_REGION_INFO_ID_AP,
  240. MPU_REGION_INFO_ID_WIFI_EMI_FW,
  241. MPU_REGION_INFO_ID_WMT, */
  242. MPU_REGION_INFO_ID_LAST = MD_SET_REGION_MD1_RW,
  243. MPU_REGION_INFO_ID_TOTAL_NUM,
  244. };
  245. /* ====================== */
  246. /* domain info */
  247. /* ---------------------------- */
  248. enum{
  249. MPU_DOMAIN_ID_AP = 0,
  250. MPU_DOMAIN_ID_MD = 1,
  251. MPU_DOMAIN_ID_MD3 = 5,
  252. MPU_DOMAIN_ID_MDHW = 7,
  253. MPU_DOMAIN_ID_TOTAL_NUM,
  254. };
  255. /* ====================== */
  256. /* index id domain_attr */
  257. /* ---------------------------- */
  258. enum{
  259. MPU_DOMAIN_INFO_ID_MD1 = 0,
  260. MPU_DOMAIN_INFO_ID_MD3,
  261. MPU_DOMAIN_INFO_ID_MDHW,
  262. MPU_DOMAIN_INFO_ID_LAST = MPU_DOMAIN_INFO_ID_MDHW,
  263. MPU_DOMAIN_INFO_ID_TOTAL_NUM,
  264. };
  265. /* ================================================================================= */
  266. /* IOCTL defination */
  267. /* ================================================================================= */
  268. /* CCCI == EEMCS */
  269. #define CCCI_IOC_MAGIC 'C'
  270. #define CCCI_IOC_MD_RESET _IO(CCCI_IOC_MAGIC, 0) /* mdlogger // META // muxreport */
  271. #define CCCI_IOC_GET_MD_STATE _IOR(CCCI_IOC_MAGIC, 1, unsigned int) /* audio */
  272. #define CCCI_IOC_PCM_BASE_ADDR _IOR(CCCI_IOC_MAGIC, 2, unsigned int) /* audio */
  273. #define CCCI_IOC_PCM_LEN _IOR(CCCI_IOC_MAGIC, 3, unsigned int) /* audio */
  274. #define CCCI_IOC_FORCE_MD_ASSERT _IO(CCCI_IOC_MAGIC, 4) /* muxreport // mdlogger */
  275. #define CCCI_IOC_ALLOC_MD_LOG_MEM _IO(CCCI_IOC_MAGIC, 5) /* mdlogger */
  276. #define CCCI_IOC_DO_MD_RST _IO(CCCI_IOC_MAGIC, 6) /* md_init */
  277. #define CCCI_IOC_SEND_RUN_TIME_DATA _IO(CCCI_IOC_MAGIC, 7) /* md_init */
  278. #define CCCI_IOC_GET_MD_INFO _IOR(CCCI_IOC_MAGIC, 8, unsigned int) /* md_init */
  279. #define CCCI_IOC_GET_MD_EX_TYPE _IOR(CCCI_IOC_MAGIC, 9, unsigned int) /* mdlogger */
  280. #define CCCI_IOC_SEND_STOP_MD_REQUEST _IO(CCCI_IOC_MAGIC, 10) /* muxreport */
  281. #define CCCI_IOC_SEND_START_MD_REQUEST _IO(CCCI_IOC_MAGIC, 11) /* muxreport */
  282. #define CCCI_IOC_DO_STOP_MD _IO(CCCI_IOC_MAGIC, 12) /* md_init */
  283. #define CCCI_IOC_DO_START_MD _IO(CCCI_IOC_MAGIC, 13) /* md_init */
  284. #define CCCI_IOC_ENTER_DEEP_FLIGHT _IO(CCCI_IOC_MAGIC, 14) /* RILD // factory */
  285. #define CCCI_IOC_LEAVE_DEEP_FLIGHT _IO(CCCI_IOC_MAGIC, 15) /* RILD // factory */
  286. #define CCCI_IOC_POWER_ON_MD _IO(CCCI_IOC_MAGIC, 16) /* md_init */
  287. #define CCCI_IOC_POWER_OFF_MD _IO(CCCI_IOC_MAGIC, 17) /* md_init */
  288. #define CCCI_IOC_POWER_ON_MD_REQUEST _IO(CCCI_IOC_MAGIC, 18)
  289. #define CCCI_IOC_POWER_OFF_MD_REQUEST _IO(CCCI_IOC_MAGIC, 19)
  290. #define CCCI_IOC_SIM_SWITCH _IOW(CCCI_IOC_MAGIC, 20, unsigned int) /* RILD // factory */
  291. #define CCCI_IOC_SEND_BATTERY_INFO _IO(CCCI_IOC_MAGIC, 21) /* md_init */
  292. #define CCCI_IOC_SIM_SWITCH_TYPE _IOR(CCCI_IOC_MAGIC, 22, unsigned int) /* RILD */
  293. #define CCCI_IOC_STORE_SIM_MODE _IOW(CCCI_IOC_MAGIC, 23, unsigned int) /* RILD */
  294. #define CCCI_IOC_GET_SIM_MODE _IOR(CCCI_IOC_MAGIC, 24, unsigned int) /* RILD */
  295. #define CCCI_IOC_RELOAD_MD_TYPE _IO(CCCI_IOC_MAGIC, 25) /* META // md_init // muxreport */
  296. #define CCCI_IOC_GET_SIM_TYPE _IOR(CCCI_IOC_MAGIC, 26, unsigned int) /* terservice */
  297. #define CCCI_IOC_ENABLE_GET_SIM_TYPE _IOW(CCCI_IOC_MAGIC, 27, unsigned int) /* terservice */
  298. #define CCCI_IOC_SEND_ICUSB_NOTIFY _IOW(CCCI_IOC_MAGIC, 28, unsigned int) /* icusbd */
  299. #define CCCI_IOC_SET_MD_IMG_EXIST _IOW(CCCI_IOC_MAGIC, 29, unsigned int) /* md_init */
  300. #define CCCI_IOC_GET_MD_IMG_EXIST _IOR(CCCI_IOC_MAGIC, 30, unsigned int) /* META */
  301. #define CCCI_IOC_GET_MD_TYPE _IOR(CCCI_IOC_MAGIC, 31, unsigned int) /* RILD */
  302. #define CCCI_IOC_STORE_MD_TYPE _IOW(CCCI_IOC_MAGIC, 32, unsigned int) /* RILD */
  303. #define CCCI_IOC_GET_MD_TYPE_SAVING _IOR(CCCI_IOC_MAGIC, 33, unsigned int) /* META */
  304. #define CCCI_IOC_GET_EXT_MD_POST_FIX _IOR(CCCI_IOC_MAGIC, 34, unsigned int) /* mdlogger */
  305. #define CCCI_IOC_FORCE_FD _IOW(CCCI_IOC_MAGIC, 35, unsigned int) /* RILD(6577) */
  306. #define CCCI_IOC_AP_ENG_BUILD _IOW(CCCI_IOC_MAGIC, 36, unsigned int) /* md_init(6577) */
  307. #define CCCI_IOC_GET_MD_MEM_SIZE _IOR(CCCI_IOC_MAGIC, 37, unsigned int) /* md_init(6577) */
  308. #define CCCI_IOC_UPDATE_SIM_SLOT_CFG _IOW(CCCI_IOC_MAGIC, 38, unsigned int) /* RILD */
  309. #define CCCI_IOC_GET_CFG_SETTING _IOW(CCCI_IOC_MAGIC, 39, unsigned int) /* md_init */
  310. #define CCCI_IOC_SET_MD_SBP_CFG _IOW(CCCI_IOC_MAGIC, 40, unsigned int) /* md_init */
  311. #define CCCI_IOC_GET_MD_SBP_CFG _IOW(CCCI_IOC_MAGIC, 41, unsigned int) /* md_init */
  312. /* modem protocol type for meta: AP_TST or DHL */
  313. #define CCCI_IOC_GET_MD_PROTOCOL_TYPE _IOR(CCCI_IOC_MAGIC, 42, char[16])
  314. #define CCCI_IOC_SEND_SIGNAL_TO_USER _IOW(CCCI_IOC_MAGIC, 43, unsigned int) /* md_init */
  315. #define CCCI_IOC_RESET_MD1_MD3_PCCIF _IO(CCCI_IOC_MAGIC, 45) /* md_init */
  316. #define CCCI_IOC_SET_HEADER _IO(CCCI_IOC_MAGIC, 112) /* emcs_va */
  317. #define CCCI_IOC_CLR_HEADER _IO(CCCI_IOC_MAGIC, 113) /* emcs_va */
  318. #define CCCI_IOC_DL_TRAFFIC_CONTROL _IOW(CCCI_IOC_MAGIC, 119, unsigned int) /* mdlogger */
  319. #define CCCI_IPC_MAGIC 'P' /* only for IPC user */
  320. /* CCCI == EEMCS */
  321. #define CCCI_IPC_RESET_RECV _IO(CCCI_IPC_MAGIC, 0)
  322. #define CCCI_IPC_RESET_SEND _IO(CCCI_IPC_MAGIC, 1)
  323. #define CCCI_IPC_WAIT_MD_READY _IO(CCCI_IPC_MAGIC, 2)
  324. #define CCCI_IPC_KERN_WRITE_TEST _IO(CCCI_IPC_MAGIC, 3)
  325. #define CCCI_IPC_UPDATE_TIME _IO(CCCI_IPC_MAGIC, 4)
  326. #define CCCI_IPC_WAIT_TIME_UPDATE _IO(CCCI_IPC_MAGIC, 5)
  327. #define CCCI_IPC_UPDATE_TIMEZONE _IO(CCCI_IPC_MAGIC, 6)
  328. /* ================================================================================= */
  329. /* CCCI Error number defination */
  330. /* ================================================================================= */
  331. /* CCCI error number region */
  332. #define CCCI_ERR_MODULE_INIT_START_ID (0)
  333. #define CCCI_ERR_COMMON_REGION_START_ID (100)
  334. #define CCCI_ERR_CCIF_REGION_START_ID (200)
  335. #define CCCI_ERR_CCCI_REGION_START_ID (300)
  336. #define CCCI_ERR_LOAD_IMG_START_ID (400)
  337. /* CCCI error number */
  338. #define CCCI_ERR_MODULE_INIT_OK (CCCI_ERR_MODULE_INIT_START_ID+0)
  339. #define CCCI_ERR_INIT_DEV_NODE_FAIL (CCCI_ERR_MODULE_INIT_START_ID+1)
  340. #define CCCI_ERR_INIT_PLATFORM_FAIL (CCCI_ERR_MODULE_INIT_START_ID+2)
  341. #define CCCI_ERR_MK_DEV_NODE_FAIL (CCCI_ERR_MODULE_INIT_START_ID+3)
  342. #define CCCI_ERR_INIT_LOGIC_LAYER_FAIL (CCCI_ERR_MODULE_INIT_START_ID+4)
  343. #define CCCI_ERR_INIT_MD_CTRL_FAIL (CCCI_ERR_MODULE_INIT_START_ID+5)
  344. #define CCCI_ERR_INIT_CHAR_DEV_FAIL (CCCI_ERR_MODULE_INIT_START_ID+6)
  345. #define CCCI_ERR_INIT_TTY_FAIL (CCCI_ERR_MODULE_INIT_START_ID+7)
  346. #define CCCI_ERR_INIT_IPC_FAIL (CCCI_ERR_MODULE_INIT_START_ID+8)
  347. #define CCCI_ERR_INIT_RPC_FAIL (CCCI_ERR_MODULE_INIT_START_ID+9)
  348. #define CCCI_ERR_INIT_FS_FAIL (CCCI_ERR_MODULE_INIT_START_ID+10)
  349. #define CCCI_ERR_INIT_CCMNI_FAIL (CCCI_ERR_MODULE_INIT_START_ID+11)
  350. #define CCCI_ERR_INIT_VIR_CHAR_FAIL (CCCI_ERR_MODULE_INIT_START_ID+12)
  351. /* ---- Common */
  352. #define CCCI_ERR_FATAL_ERR (CCCI_ERR_COMMON_REGION_START_ID+0)
  353. #define CCCI_ERR_ASSERT_ERR (CCCI_ERR_COMMON_REGION_START_ID+1)
  354. #define CCCI_ERR_MD_IN_RESET (CCCI_ERR_COMMON_REGION_START_ID+2)
  355. #define CCCI_ERR_RESET_NOT_READY (CCCI_ERR_COMMON_REGION_START_ID+3)
  356. #define CCCI_ERR_GET_MEM_FAIL (CCCI_ERR_COMMON_REGION_START_ID+4)
  357. #define CCCI_ERR_GET_SMEM_SETTING_FAIL (CCCI_ERR_COMMON_REGION_START_ID+5)
  358. #define CCCI_ERR_INVALID_PARAM (CCCI_ERR_COMMON_REGION_START_ID+6)
  359. #define CCCI_ERR_LARGE_THAN_BUF_SIZE (CCCI_ERR_COMMON_REGION_START_ID+7)
  360. #define CCCI_ERR_GET_MEM_LAYOUT_FAIL (CCCI_ERR_COMMON_REGION_START_ID+8)
  361. #define CCCI_ERR_MEM_CHECK_FAIL (CCCI_ERR_COMMON_REGION_START_ID+9)
  362. #define CCCI_IPO_H_RESTORE_FAIL (CCCI_ERR_COMMON_REGION_START_ID+10)
  363. /* ---- CCIF */
  364. #define CCCI_ERR_CCIF_NOT_READY (CCCI_ERR_CCIF_REGION_START_ID+0)
  365. #define CCCI_ERR_CCIF_CALL_BACK_HAS_REGISTERED (CCCI_ERR_CCIF_REGION_START_ID+1)
  366. #define CCCI_ERR_CCIF_GET_NULL_POINTER (CCCI_ERR_CCIF_REGION_START_ID+2)
  367. #define CCCI_ERR_CCIF_UN_SUPPORT (CCCI_ERR_CCIF_REGION_START_ID+3)
  368. #define CCCI_ERR_CCIF_NO_PHYSICAL_CHANNEL (CCCI_ERR_CCIF_REGION_START_ID+4)
  369. #define CCCI_ERR_CCIF_INVALID_RUNTIME_LEN (CCCI_ERR_CCIF_REGION_START_ID+5)
  370. #define CCCI_ERR_CCIF_INVALID_MD_SYS_ID (CCCI_ERR_CCIF_REGION_START_ID+6)
  371. #define CCCI_ERR_CCIF_GET_HW_INFO_FAIL (CCCI_ERR_CCIF_REGION_START_ID+9)
  372. /* ---- CCCI */
  373. #define CCCI_ERR_INVALID_LOGIC_CHANNEL_ID (CCCI_ERR_CCCI_REGION_START_ID+0)
  374. #define CCCI_ERR_PUSH_RX_DATA_TO_TX_CHANNEL (CCCI_ERR_CCCI_REGION_START_ID+1)
  375. #define CCCI_ERR_REG_CALL_BACK_FOR_TX_CHANNEL (CCCI_ERR_CCCI_REGION_START_ID+2)
  376. #define CCCI_ERR_LOGIC_CH_HAS_REGISTERED (CCCI_ERR_CCCI_REGION_START_ID+3)
  377. #define CCCI_ERR_MD_NOT_READY (CCCI_ERR_CCCI_REGION_START_ID+4)
  378. #define CCCI_ERR_ALLOCATE_MEMORY_FAIL (CCCI_ERR_CCCI_REGION_START_ID+5)
  379. #define CCCI_ERR_CREATE_CCIF_INSTANCE_FAIL (CCCI_ERR_CCCI_REGION_START_ID+6)
  380. #define CCCI_ERR_REPEAT_CHANNEL_ID (CCCI_ERR_CCCI_REGION_START_ID+7)
  381. #define CCCI_ERR_KFIFO_IS_NOT_READY (CCCI_ERR_CCCI_REGION_START_ID+8)
  382. #define CCCI_ERR_GET_NULL_POINTER (CCCI_ERR_CCCI_REGION_START_ID+9)
  383. #define CCCI_ERR_GET_RX_DATA_FROM_TX_CHANNEL (CCCI_ERR_CCCI_REGION_START_ID+10)
  384. #define CCCI_ERR_CHANNEL_NUM_MIS_MATCH (CCCI_ERR_CCCI_REGION_START_ID+11)
  385. #define CCCI_ERR_START_ADDR_NOT_4BYTES_ALIGN (CCCI_ERR_CCCI_REGION_START_ID+12)
  386. #define CCCI_ERR_NOT_DIVISIBLE_BY_4 (CCCI_ERR_CCCI_REGION_START_ID+13)
  387. #define CCCI_ERR_MD_AT_EXCEPTION (CCCI_ERR_CCCI_REGION_START_ID+14)
  388. #define CCCI_ERR_MD_CB_HAS_REGISTER (CCCI_ERR_CCCI_REGION_START_ID+15)
  389. #define CCCI_ERR_MD_INDEX_NOT_FOUND (CCCI_ERR_CCCI_REGION_START_ID+16)
  390. #define CCCI_ERR_DROP_PACKET (CCCI_ERR_CCCI_REGION_START_ID+17)
  391. #define CCCI_ERR_PORT_RX_FULL (CCCI_ERR_CCCI_REGION_START_ID+18)
  392. #define CCCI_ERR_SYSFS_NOT_READY (CCCI_ERR_CCCI_REGION_START_ID+19)
  393. #define CCCI_ERR_IPC_ID_ERROR (CCCI_ERR_CCCI_REGION_START_ID+20)
  394. #define CCCI_ERR_FUNC_ID_ERROR (CCCI_ERR_CCCI_REGION_START_ID+21)
  395. #define CCCI_ERR_INVALID_QUEUE_INDEX (CCCI_ERR_CCCI_REGION_START_ID+21)
  396. #define CCCI_ERR_HIF_NOT_POWER_ON (CCCI_ERR_CCCI_REGION_START_ID+22)
  397. /* ---- Load image error */
  398. #define CCCI_ERR_LOAD_IMG_NOMEM (CCCI_ERR_LOAD_IMG_START_ID+0)
  399. #define CCCI_ERR_LOAD_IMG_FILE_OPEN (CCCI_ERR_LOAD_IMG_START_ID+1)
  400. #define CCCI_ERR_LOAD_IMG_FILE_READ (CCCI_ERR_LOAD_IMG_START_ID+2)
  401. #define CCCI_ERR_LOAD_IMG_KERN_READ (CCCI_ERR_LOAD_IMG_START_ID+3)
  402. #define CCCI_ERR_LOAD_IMG_NO_ADDR (CCCI_ERR_LOAD_IMG_START_ID+4)
  403. #define CCCI_ERR_LOAD_IMG_NO_FIRST_BOOT (CCCI_ERR_LOAD_IMG_START_ID+5)
  404. #define CCCI_ERR_LOAD_IMG_LOAD_FIRM (CCCI_ERR_LOAD_IMG_START_ID+6)
  405. #define CCCI_ERR_LOAD_IMG_FIRM_NULL (CCCI_ERR_LOAD_IMG_START_ID+7)
  406. #define CCCI_ERR_LOAD_IMG_CHECK_HEAD (CCCI_ERR_LOAD_IMG_START_ID+8)
  407. #define CCCI_ERR_LOAD_IMG_SIGN_FAIL (CCCI_ERR_LOAD_IMG_START_ID+9)
  408. #define CCCI_ERR_LOAD_IMG_CIPHER_FAIL (CCCI_ERR_LOAD_IMG_START_ID+10)
  409. #define CCCI_ERR_LOAD_IMG_MD_CHECK (CCCI_ERR_LOAD_IMG_START_ID+11)
  410. #define CCCI_ERR_LOAD_IMG_DSP_CHECK (CCCI_ERR_LOAD_IMG_START_ID+12)
  411. #define CCCI_ERR_LOAD_IMG_ABNORAL_SIZE (CCCI_ERR_LOAD_IMG_START_ID+13)
  412. #define CCCI_ERR_LOAD_IMG_NOT_FOUND (CCCI_ERR_LOAD_IMG_START_ID+13)
  413. /* ================================================================================= */
  414. /* CCCI Channel ID and Message defination */
  415. /* ================================================================================= */
  416. typedef enum {
  417. CCCI_CONTROL_RX = 0,
  418. CCCI_CONTROL_TX = 1,
  419. CCCI_SYSTEM_RX = 2,
  420. CCCI_SYSTEM_TX = 3,
  421. CCCI_PCM_RX = 4,
  422. CCCI_PCM_TX = 5,
  423. CCCI_UART1_RX = 6, /* META */
  424. CCCI_UART1_RX_ACK = 7,
  425. CCCI_UART1_TX = 8,
  426. CCCI_UART1_TX_ACK = 9,
  427. CCCI_UART2_RX = 10, /* MUX */
  428. CCCI_UART2_RX_ACK = 11,
  429. CCCI_UART2_TX = 12,
  430. CCCI_UART2_TX_ACK = 13,
  431. CCCI_FS_RX = 14,
  432. CCCI_FS_TX = 15,
  433. CCCI_PMIC_RX = 16,
  434. CCCI_PMIC_TX = 17,
  435. CCCI_UEM_RX = 18,
  436. CCCI_UEM_TX = 19,
  437. CCCI_CCMNI1_RX = 20,
  438. CCCI_CCMNI1_RX_ACK = 21,
  439. CCCI_CCMNI1_TX = 22,
  440. CCCI_CCMNI1_TX_ACK = 23,
  441. CCCI_CCMNI2_RX = 24,
  442. CCCI_CCMNI2_RX_ACK = 25,
  443. CCCI_CCMNI2_TX = 26,
  444. CCCI_CCMNI2_TX_ACK = 27,
  445. CCCI_CCMNI3_RX = 28,
  446. CCCI_CCMNI3_RX_ACK = 29,
  447. CCCI_CCMNI3_TX = 30,
  448. CCCI_CCMNI3_TX_ACK = 31,
  449. CCCI_RPC_RX = 32,
  450. CCCI_RPC_TX = 33,
  451. CCCI_IPC_RX = 34,
  452. CCCI_IPC_RX_ACK = 35,
  453. CCCI_IPC_TX = 36,
  454. CCCI_IPC_TX_ACK = 37,
  455. CCCI_IPC_UART_RX = 38,
  456. CCCI_IPC_UART_RX_ACK = 39,
  457. CCCI_IPC_UART_TX = 40,
  458. CCCI_IPC_UART_TX_ACK = 41,
  459. CCCI_MD_LOG_RX = 42,
  460. CCCI_MD_LOG_TX = 43,
  461. /* ch44~49 reserved for ARM7 */
  462. CCCI_IT_RX = 50,
  463. CCCI_IT_TX = 51,
  464. CCCI_IMSV_UL = 52,
  465. CCCI_IMSV_DL = 53,
  466. CCCI_IMSC_UL = 54,
  467. CCCI_IMSC_DL = 55,
  468. CCCI_IMSA_UL = 56,
  469. CCCI_IMSA_DL = 57,
  470. CCCI_IMSDC_UL = 58,
  471. CCCI_IMSDC_DL = 59,
  472. CCCI_ICUSB_RX = 60,
  473. CCCI_ICUSB_TX = 61,
  474. CCCI_LB_IT_RX = 62,
  475. CCCI_LB_IT_TX = 63,
  476. CCCI_CCMNI1_DL_ACK = 64,
  477. CCCI_CCMNI2_DL_ACK = 65,
  478. CCCI_CCMNI3_DL_ACK = 66,
  479. CCCI_STATUS_RX = 67,
  480. CCCI_STATUS_TX = 68,
  481. CCCI_CCMNI4_RX = 69,
  482. CCCI_CCMNI4_RX_ACK = 70,
  483. CCCI_CCMNI4_TX = 71,
  484. CCCI_CCMNI4_TX_ACK = 72,
  485. CCCI_CCMNI4_DLACK_RX = 73, /*__CCMNI_ACK_FAST_PATH__*/
  486. CCCI_CCMNI5_RX = 74,
  487. CCCI_CCMNI5_RX_ACK = 75,
  488. CCCI_CCMNI5_TX = 76,
  489. CCCI_CCMNI5_TX_ACK = 77,
  490. CCCI_CCMNI5_DLACK_RX = 78, /*__CCMNI_ACK_FAST_PATH__*/
  491. CCCI_CCMNI6_RX = 79,
  492. CCCI_CCMNI6_RX_ACK = 80,
  493. CCCI_CCMNI6_TX = 81,
  494. CCCI_CCMNI6_TX_ACK = 82,
  495. CCCI_CCMNI6_DLACK_RX = 83, /*__CCMNI_ACK_FAST_PATH__*/
  496. CCCI_CCMNI7_RX = 84,
  497. CCCI_CCMNI7_RX_ACK = 85,
  498. CCCI_CCMNI7_TX = 86,
  499. CCCI_CCMNI7_TX_ACK = 87,
  500. CCCI_CCMNI7_DLACK_RX = 88, /*__CCMNI_ACK_FAST_PATH__*/
  501. CCCI_CCMNI8_RX = 89,
  502. CCCI_CCMNI8_RX_ACK = 90,
  503. CCCI_CCMNI8_TX = 91,
  504. CCCI_CCMNI8_TX_ACK = 92,
  505. CCCI_CCMNI8_DLACK_RX = 93, /*__CCMNI_ACK_FAST_P*/
  506. CCCI_MDL_MONITOR_DL = 94,
  507. CCCI_MDL_MONITOR_UL = 95,
  508. /*5 chs for C2K only*/
  509. CCCI_C2K_PPP_DATA, /* data ch for c2k */
  510. CCCI_C2K_AT, /*rild AT ch for c2k*/
  511. CCCI_C2K_AT2, /*rild AT2 ch for c2k*/
  512. CCCI_C2K_AT3, /*rild AT3 ch for c2k*/
  513. CCCI_C2K_LB_DL, /*downlink loopback*/
  514. CCCI_MONITOR_CH,
  515. CCCI_DUMMY_CH,
  516. CCCI_MAX_CH_NUM, /* RX channel ID should NOT be >= this!! */
  517. CCCI_MONITOR_CH_ID = 0xf0000000, /* for backward compatible */
  518. CCCI_FORCE_ASSERT_CH = 20090215,
  519. CCCI_INVALID_CH_ID = 0xffffffff,
  520. } CCCI_CH;
  521. enum c2k_channel {
  522. CTRL_CH_C2K = 0,
  523. AUDIO_CH_C2K = 1,
  524. DATA_PPP_CH_C2K = 2,
  525. MDLOG_CTRL_CH_C2K = 3,
  526. FS_CH_C2K = 4,
  527. AT_CH_C2K = 5,
  528. AGPS_CH_C2K = 6,
  529. AT2_CH_C2K = 7,
  530. AT3_CH_C2K = 8,
  531. MDLOG_CH_C2K = 9,
  532. STATUS_CH_C2K = 11,
  533. NET1_CH_C2K = 12,
  534. NET2_CH_C2K = 13, /*need sync with c2k */
  535. NET3_CH_C2K = 14, /*need sync with c2k */
  536. NET4_CH_C2K = 15,
  537. NET5_CH_C2K = 16,
  538. C2K_MAX_CH_NUM,
  539. LOOPBACK_C2K = 255,
  540. MD2AP_LOOPBACK_C2K = 256,
  541. };
  542. /* AP->md_init messages on monitor channel */
  543. typedef enum {
  544. CCCI_MD_MSG_BOOT_READY = 0xFAF50001,
  545. CCCI_MD_MSG_BOOT_UP = 0xFAF50002,
  546. CCCI_MD_MSG_EXCEPTION = 0xFAF50003,
  547. CCCI_MD_MSG_RESET = 0xFAF50004,
  548. CCCI_MD_MSG_RESET_RETRY = 0xFAF50005,
  549. CCCI_MD_MSG_READY_TO_RESET = 0xFAF50006,
  550. CCCI_MD_MSG_BOOT_TIMEOUT = 0xFAF50007,
  551. CCCI_MD_MSG_STOP_MD_REQUEST = 0xFAF50008,
  552. CCCI_MD_MSG_START_MD_REQUEST = 0xFAF50009,
  553. CCCI_MD_MSG_ENTER_FLIGHT_MODE = 0xFAF5000A,
  554. CCCI_MD_MSG_LEAVE_FLIGHT_MODE = 0xFAF5000B,
  555. CCCI_MD_MSG_POWER_ON_REQUEST = 0xFAF5000C,
  556. CCCI_MD_MSG_POWER_OFF_REQUEST = 0xFAF5000D,
  557. CCCI_MD_MSG_SEND_BATTERY_INFO = 0xFAF5000E,
  558. CCCI_MD_MSG_NOTIFY = 0xFAF5000F,
  559. CCCI_MD_MSG_STORE_NVRAM_MD_TYPE = 0xFAF50010,
  560. CCCI_MD_MSG_CFG_UPDATE = 0xFAF50011,
  561. } CCCI_MD_MSG;
  562. /* export to other kernel modules, better not let other module include ECCCI header directly (except IPC...) */
  563. enum {
  564. MD_STATE_INVALID = 0,
  565. MD_STATE_BOOTING = 1,
  566. MD_STATE_READY = 2,
  567. MD_STATE_EXCEPTION = 3
  568. }; /* align to MD_BOOT_STAGE */
  569. enum {
  570. ID_GET_MD_WAKEUP_SRC = 0, /* for SPM */
  571. ID_CCCI_DORMANCY = 1, /* abandoned */
  572. ID_LOCK_MD_SLEEP = 2, /* abandoned */
  573. ID_ACK_MD_SLEEP = 3, /* abandoned */
  574. ID_SSW_SWITCH_MODE = 4, /* abandoned */
  575. ID_SET_MD_TX_LEVEL = 5, /* abandoned */
  576. ID_GET_TXPOWER = 6, /* for thermal */
  577. ID_IPO_H_RESTORE_CB = 7, /* abandoned */
  578. ID_FORCE_MD_ASSERT = 8, /* abandoned */
  579. ID_PAUSE_LTE = 9, /* for DVFS */
  580. ID_STORE_SIM_SWITCH_MODE = 10,
  581. ID_GET_SIM_SWITCH_MODE = 11,
  582. ID_GET_MD_STATE = 12, /* for DVFS */
  583. ID_THROTTLING_CFG = 13, /* For MD SW throughput throttling */
  584. ID_RESET_MD = 14, /* for SVLTE MD3 reset MD1 */
  585. ID_DUMP_MD_REG = 15,
  586. ID_DUMP_MD_SLEEP_MODE = 16, /* for dump MD debug info from SMEM when AP sleep */
  587. ID_MD_RF_DESENSE = 17, /* Notify MD camera on/off will affect MD RF */
  588. ID_UPDATE_TX_POWER = 100, /* for SWTP */
  589. };
  590. enum {
  591. /*bit0-bit15: for modem capability related with ccci or ccci&ccmni driver*/
  592. MODEM_CAP_NAPI = (1<<0),
  593. MODEM_CAP_TXBUSY_STOP = (1<<1),
  594. MODEM_CAP_SGIO = (1<<2),
  595. /*bit16-bit31: for modem capability only related with ccmni driver*/
  596. MODEM_CAP_CCMNI_DISABLE = (1<<16),
  597. MODEM_CAP_DATA_ACK_DVD = (1<<17),
  598. MODEM_CAP_CCMNI_SEQNO = (1<<18),
  599. MODEM_CAP_CCMNI_IRAT = (1<<19),
  600. MODEM_CAP_WORLD_PHONE = (1<<20),
  601. MODEM_CAP_CCMNI_MQ = (1<<21), /* it must depend on DATA ACK DEVIDE feature */
  602. };
  603. /* AP<->MD messages on control or system channel */
  604. enum {
  605. /* Control channel, MD->AP */
  606. MD_INIT_START_BOOT = 0x0,
  607. MD_NORMAL_BOOT = 0x0,
  608. MD_NORMAL_BOOT_READY = 0x1, /* not using */
  609. MD_META_BOOT_READY = 0x2, /* not using */
  610. MD_RESET = 0x3, /* not using */
  611. MD_EX = 0x4,
  612. CCCI_DRV_VER_ERROR = 0x5,
  613. MD_EX_REC_OK = 0x6,
  614. MD_EX_RESUME = 0x7, /* not using */
  615. MD_EX_PASS = 0x8,
  616. MD_INIT_CHK_ID = 0x5555FFFF,
  617. MD_EX_CHK_ID = 0x45584350,
  618. MD_EX_REC_OK_CHK_ID = 0x45524543,
  619. /* System channel, AP->MD || AP<-->MD message start from 0x100 */
  620. MD_DORMANT_NOTIFY = 0x100,
  621. MD_SLP_REQUEST = 0x101,
  622. MD_TX_POWER = 0x102,
  623. MD_RF_TEMPERATURE = 0x103,
  624. MD_RF_TEMPERATURE_3G = 0x104,
  625. MD_GET_BATTERY_INFO = 0x105,
  626. MD_SIM_TYPE = 0x107,
  627. MD_ICUSB_NOTIFY = 0x108,
  628. /* 0x109 for md legacy use to crystal_thermal_change */
  629. MD_LOW_BATTERY_LEVEL = 0x10A,
  630. /* 0x10B-0x10C occupied by EEMCS */
  631. MD_PAUSE_LTE = 0x10D,
  632. /* used for throttling feature - start */
  633. MD_THROTTLING = 0x112, /* SW throughput throttling */
  634. /* used for throttling feature - end */
  635. /* TEST_MESSAGE_FOR_BRINGUP */
  636. TEST_MSG_ID_MD2AP = 0x114, /* for IT only */
  637. TEST_MSG_ID_AP2MD = 0x115, /* for IT only */
  638. TEST_MSG_ID_L1CORE_MD2AP = 0x116, /* for IT only */
  639. TEST_MSG_ID_L1CORE_AP2MD = 0x117, /* for IT only */
  640. /* swtp */
  641. MD_SW_MD1_TX_POWER = 0x10E,
  642. MD_SW_MD2_TX_POWER = 0x10F,
  643. MD_SW_MD1_TX_POWER_REQ = 0x110,
  644. MD_SW_MD2_TX_POWER_REQ = 0x111,
  645. MD_RF_DESENSE = 0x113,
  646. /*c2k ctrl msg start from 0x200*/
  647. C2K_STATUS_IND_MSG = 0x201, /* for usb bypass */
  648. C2K_STATUS_QUERY_MSG = 0x202, /* for usb bypass */
  649. C2K_HB_MSG = 0x207,
  650. /* System channel, MD->AP message start from 0x1000 */
  651. MD_WDT_MONITOR = 0x1000,
  652. /* System channel, AP->MD message */
  653. MD_WAKEN_UP = 0x10000,
  654. };
  655. #define NORMAL_BOOT_ID 0
  656. #define META_BOOT_ID 1
  657. typedef enum {
  658. INVALID = 0, /* no traffic */
  659. GATED, /* broadcast by modem driver, no traffic */
  660. BOOTING, /* broadcast by modem driver */
  661. READY, /* broadcast by port_kernel */
  662. EXCEPTION, /* broadcast by port_kernel */
  663. RESET, /* broadcast by modem driver, no traffic */
  664. RX_IRQ, /* broadcast by modem driver, illegal for md->md_state, only for NAPI! */
  665. TX_IRQ, /* broadcast by modem driver, illegal for md->md_state, only for network! */
  666. TX_FULL, /* broadcast by modem driver, illegal for md->md_state, only for network! */
  667. BOOT_FAIL, /* broadcast by port_kernel, illegal for md->md_state */
  668. } MD_STATE; /* for CCCI internal */
  669. /* ================================================================================= */
  670. /* Image type and header defination part */
  671. /* ================================================================================= */
  672. typedef enum {
  673. IMG_MD = 0,
  674. IMG_DSP,
  675. IMG_ARMV7,
  676. IMG_NUM,
  677. } MD_IMG_TYPE;
  678. typedef enum{
  679. INVALID_VARSION = 0,
  680. DEBUG_VERSION,
  681. RELEASE_VERSION
  682. } PRODUCT_VER_TYPE;
  683. #define IMG_NAME_LEN 32
  684. #define IMG_POSTFIX_LEN 16
  685. #define IMG_PATH_LEN 64
  686. struct IMG_CHECK_INFO {
  687. char *product_ver; /* debug/release/invalid */
  688. char *image_type; /*2G/3G/invalid*/
  689. char *platform; /* MT6573_S00(MT6573E1) or MT6573_S01(MT6573E2) */
  690. char *build_time; /* build time string */
  691. char *build_ver; /* project version, ex:11A_MD.W11.28 */
  692. unsigned int mem_size; /*md rom+ram mem size*/
  693. unsigned int md_img_size; /*modem image actual size, exclude head size*/
  694. PRODUCT_VER_TYPE version;
  695. unsigned int header_verno; /* header structure version number */
  696. };
  697. struct IMG_REGION_INFO {
  698. unsigned int region_num; /* total region number */
  699. struct _md_regin_info region_info[8]; /* max support 8 regions */
  700. unsigned int domain_attr[4]; /* max support 4 domain settings, each region has 4 control bits*/
  701. };
  702. struct ccci_image_info {
  703. MD_IMG_TYPE type;
  704. char file_name[IMG_PATH_LEN];
  705. phys_addr_t address; /* phy memory address to load this image */
  706. unsigned int size; /* image size without signature, cipher and check header, read form check header */
  707. unsigned int offset; /* signature and cipher header */
  708. unsigned int tail_length; /* signature tail */
  709. unsigned int dsp_offset;
  710. unsigned int dsp_size;
  711. unsigned int arm7_offset;
  712. unsigned int arm7_size;
  713. char *ap_platform;
  714. struct IMG_CHECK_INFO img_info; /* read from MD image header */
  715. struct IMG_CHECK_INFO ap_info; /* get from AP side configuration */
  716. struct IMG_REGION_INFO rmpu_info; /* refion pinfo for RMPU setting */
  717. };
  718. struct ccci_dev_cfg {
  719. unsigned int index;
  720. unsigned int major;
  721. unsigned int minor_base;
  722. unsigned int capability;
  723. };
  724. typedef int (*get_status_func_t)(int, char*, int);
  725. typedef int (*boot_md_func_t)(int);
  726. /* Rutime data common part */
  727. typedef enum {
  728. FEATURE_NOT_EXIST = 0,
  729. FEATURE_NOT_SUPPORT,
  730. FEATURE_SUPPORT,
  731. FEATURE_PARTIALLY_SUPPORT,
  732. } MISC_FEATURE_STATE;
  733. typedef enum {
  734. MISC_DMA_ADDR = 0,
  735. MISC_32K_LESS,
  736. MISC_RAND_SEED,
  737. MISC_MD_COCLK_SETTING,
  738. MISC_MD_SBP_SETTING,
  739. MISC_MD_SEQ_CHECK,
  740. MISC_MD_CLIB_TIME,
  741. MISC_MD_C2K_ON,
  742. } MISC_FEATURE_ID;
  743. typedef enum {
  744. MODE_UNKNOWN = -1, /* -1 */
  745. MODE_IDLE, /* 0 */
  746. MODE_USB, /* 1 */
  747. MODE_SD, /* 2 */
  748. MODE_POLLING, /* 3 */
  749. MODE_WAITSD, /* 4 */
  750. } LOGGING_MODE;
  751. typedef enum {
  752. HIF_EX_INIT = 0, /* interrupt */
  753. HIF_EX_ACK, /* AP->MD */
  754. HIF_EX_INIT_DONE, /* polling */
  755. HIF_EX_CLEARQ_DONE, /* interrupt */
  756. HIF_EX_CLEARQ_ACK, /* AP->MD */
  757. HIF_EX_ALLQ_RESET, /* polling */
  758. } HIF_EX_STAGE;
  759. /* runtime data format uses EEMCS's version, NOT the same with legacy CCCI */
  760. struct modem_runtime {
  761. u32 Prefix; /* "CCIF" */
  762. u32 Platform_L; /* Hardware Platform String ex: "TK6516E0" */
  763. u32 Platform_H;
  764. u32 DriverVersion; /* 0x00000923 since W09.23 */
  765. u32 BootChannel; /* Channel to ACK AP with boot ready */
  766. u32 BootingStartID; /* MD is booting. NORMAL_BOOT_ID or META_BOOT_ID */
  767. #if 1 /* not using in EEMCS */
  768. u32 BootAttributes; /* Attributes passing from AP to MD Booting */
  769. u32 BootReadyID; /* MD response ID if boot successful and ready */
  770. u32 FileShareMemBase;
  771. u32 FileShareMemSize;
  772. u32 ExceShareMemBase;
  773. u32 ExceShareMemSize;
  774. u32 CCIFShareMemBase;
  775. u32 CCIFShareMemSize;
  776. #ifdef FEATURE_DHL_LOG_EN
  777. u32 DHLShareMemBase; /* For DHL */
  778. u32 DHLShareMemSize;
  779. #endif
  780. #ifdef FEATURE_MD1MD3_SHARE_MEM
  781. u32 MD1MD3ShareMemBase; /* For MD1 MD3 share memory */
  782. u32 MD1MD3ShareMemSize;
  783. #endif
  784. u32 TotalShareMemBase;
  785. u32 TotalShareMemSize;
  786. u32 CheckSum;
  787. #endif
  788. u32 Postfix; /* "CCIF" */
  789. #if 1 /* misc region */
  790. u32 misc_prefix; /* "MISC" */
  791. u32 support_mask;
  792. u32 index;
  793. u32 next;
  794. u32 feature_0_val[4];
  795. u32 feature_1_val[4];
  796. u32 feature_2_val[4];
  797. u32 feature_3_val[4];
  798. u32 feature_4_val[4];
  799. u32 feature_5_val[4];
  800. u32 feature_6_val[4];
  801. u32 feature_7_val[4];
  802. u32 feature_8_val[4];
  803. u32 feature_9_val[4];
  804. u32 feature_10_val[4];
  805. u32 feature_11_val[4];
  806. u32 feature_12_val[4];
  807. u32 feature_13_val[4];
  808. u32 feature_14_val[4];
  809. u32 feature_15_val[4];
  810. u32 reserved_2[3];
  811. u32 misc_postfix; /* "MISC" */
  812. #endif
  813. } __packed;
  814. typedef enum {
  815. ID_GET_FDD_THERMAL_DATA = 0,
  816. ID_GET_TDD_THERMAL_DATA,
  817. } SYS_CB_ID;
  818. typedef int (*ccci_sys_cb_func_t)(int, int);
  819. typedef struct{
  820. SYS_CB_ID id;
  821. ccci_sys_cb_func_t func;
  822. } ccci_sys_cb_func_info_t;
  823. #define MAX_KERN_API 24 /* 20 */
  824. typedef enum {
  825. SMEM_SUB_REGION00 = 0, /* dbm */
  826. SMEM_SUB_REGION01,
  827. SMEM_SUB_REGION02,
  828. SMEM_SUB_REGION03,
  829. SMEM_SUB_REGION04,
  830. SMEM_SUB_REGION05,
  831. SMEM_SUB_REGION06,
  832. SMEM_SUB_REGION07,
  833. SMEM_SUB_REGION_MAX,
  834. } smem_sub_region_t;
  835. /* ============================================================================================== */
  836. /* Export API */
  837. /* ============================================================================================== */
  838. int ccci_get_fo_setting(char item[], unsigned int *val); /* Export by ccci util */
  839. void ccci_md_mem_reserve(void); /* Export by ccci util */
  840. unsigned int get_modem_is_enabled(int md_id); /* Export by ccci util */
  841. unsigned int ccci_get_modem_nr(void); /* Export by ccci util */
  842. int ccci_init_security(void); /* Export by ccci util */
  843. int ccci_sysfs_add_modem(int md_id, void *kobj, void *ktype,
  844. get_status_func_t, boot_md_func_t); /* Export by ccci util */
  845. int get_modem_support_cap(int md_id); /* Export by ccci util */
  846. int set_modem_support_cap(int md_id, int new_val); /* Export by ccci util */
  847. char *ccci_get_md_info_str(int md_id); /* Export by ccci util */
  848. int ccci_load_firmware(int md_id, void *img_inf, char img_err_str[], char post_fix[]); /* Export by ccci util */
  849. int get_md_resv_mem_info(int md_id, phys_addr_t *r_rw_base, unsigned int *r_rw_size,
  850. phys_addr_t *srw_base, unsigned int *srw_size); /* Export by ccci util */
  851. int get_md1_md3_resv_smem_info(int md_id, phys_addr_t *rw_base, unsigned int *rw_size);
  852. /* used for throttling feature - start */
  853. unsigned long ccci_get_md_boot_count(int md_id);
  854. /* used for throttling feature - end */
  855. int exec_ccci_kern_func_by_md_id(int md_id, unsigned int id, char *buf, unsigned int len);
  856. int register_ccci_sys_call_back(int md_id, unsigned int id, ccci_sys_cb_func_t func);
  857. int switch_sim_mode(int id, char *buf, unsigned int len);
  858. unsigned int get_sim_switch_type(void);
  859. #ifdef CONFIG_MTK_ECCCI_C2K
  860. /* for c2k usb bypass */
  861. int ccci_c2k_rawbulk_intercept(int ch_id, unsigned int interception);
  862. int ccci_c2k_buffer_push(int ch_id, void *buf, int count);
  863. int modem_dtr_set(int on, int low_latency);
  864. int modem_dcd_state(void);
  865. #endif
  866. /* CLib for modem get ap time */
  867. void notify_time_update(void);
  868. int wait_time_update_notify(void);
  869. /*cb API for system power off*/
  870. void ccci_power_off(void);
  871. /* Ubin API */
  872. int md_capability(int md_id, int wm_id, int curr_md_type);
  873. int get_md_wm_id_map(int ap_wm_id);
  874. /* AP MD user share */
  875. void __iomem *get_smem_start_addr(int md_id, int region_id, int *size_o);
  876. #endif