blob: 8e319b1c0b9023bbeca109532469de4e60657617 [file] [log] [blame]
yu.dongc33b3072024-08-21 23:14:49 -07001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2005
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*****************************************************************************
37 *
38 * Filename:
39 * ---------
40 * drv_comm.h
41 *
42 * Project:
43 * --------
44 * Maui_Software
45 *
46 * Description:
47 * ------------
48 * This file is intends for driver common interface.
49 *
50 * Author:
51 * -------
52 * -------
53 *
54 *============================================================================
55 * HISTORY
56 * Below this line, this part is controlled by ClearCase. DO NOT MODIFY!!
57 *------------------------------------------------------------------------------
58 * $Log$
59 *
60 * 07 17 2019 wei-de.chen
61 * [MOLY00422800] [Build Error][MERCURY] Add Mercury related definition
62 * Add definition of MERCURY and MT6297P to solve build error on MERCURY.DEV
63 *
64 * 05 02 2019 wei-de.chen
65 * [MOLY00396869] [MODIS HW Copro] Work on making Modis to run with ESL HW models and Uplane with ESL
66 * Merge code of ESL_MASE_GEN97 according to MUK/WCS/CTD/MTA4 Ireneusz Zie's request
67 *
68 * 06 20 2018 steven-yx.hu
69 * [MOLY00333775][UMOLYE] 95 xL1Sim build warning fix.
70 *
71 * 03 14 2018 wei-de.chen
72 * [MOLY00309244] [6297] Add MT6297 related definition
73 * Add MT6297 related definition
74 *
75 * 02 22 2018 wei-de.chen
76 * [MOLY00309244] [6297] Add MT6297 related definition
77 *
78 * Add MT6297 related definition
79 *
80 * 02 22 2018 wei-de.chen
81 * [MOLY00309244] [6297] Add MT6297 related definition
82 * Add MT6297 related definition
83 *
84 * 12 15 2017 wei-de.chen
85 * [MOLY00296581] [Gen95] add MT3967 related definition
86 * Add MT3967 related definition
87 *
88 * 12 15 2017 wei-de.chen
89 * [MOLY00296581] [Gen95] add MT3967 related definition
90 * Add MT3967 related definition
91 *
92 * 10 30 2017 wei-de.chen
93 * [MOLY00286038] [MT6765] Add definition of MT6765
94 * Add MT6765 (Cervino) Definition
95 *
96 * 08 24 2017 wei-de.chen
97 * [MOLY00273493] [UMOLYA] Add definition of MT6771
98 * Add MT6771 (Sylvia) Definition
99 *
100 * 06 08 2017 wei-de.chen
101 * [MOLY00243802] [MT6739] Add definition of MT6739
102 * Add MT6739 related definition
103 *
104 * 05 26 2017 wei-de.chen
105 * [MOLY00253086] [Need Patch](LTE domain) UMOLYA build error for MT6295M_FPGA(L1S_L1DISABLE)
106 * Add MT6295M definition
107 *
108 * 04 20 2017 wei-de.chen
109 * [MOLY00243706] [MT6295M] Add MT6295M related definition
110 * Add MT6295 related definition
111 *
112 * 06 16 2016 wei-de.chen
113 * [MOLY00184725] UMOLYA ESL/MASE porting
114 * add __ESL_MASE__ definition due to ESL load
115 * Request by SSE_SS3 Chin-Chieh Hung
116 *
117 * 03 29 2016 wei-de.chen
118 * [MOLY00171664] [UMOLYA] Add definition of MT6763
119 * Add definition of MT6763
120 *
121 * 01 06 2016 wei-de.chen
122 * [MOLY00156132] [ELBRUS] Add ESL definition to DRV_WriteReg32_NPW_RB
123 * Add ESL definition to DRV_WriteReg32_NPW_RB for fake HW in ESL
124 *
125 * 12 09 2015 wei-de.chen
126 * [MOLY00151011] [6292] Modify NPW_write API to fit new CPU & bus architecture
127 * Modify NPW_write API of Elbrus to fit new CPU & bus architecture
128 *
129 * 11 30 2015 wei-de.chen
130 * [MOLY00151011] [6292] Modify NPW_write API to fit new CPU & bus architecture
131 * Modify NPW_write API of Elbrus to fit new CPU & bus architecture
132 *
133 * 09 22 2015 wei-de.chen
134 * [MOLY00137134] [UMOLY] Add driver feature files for Elbrus
135 * Temp add ELBRUS definition for NPW related function for bring-up (still need optimize in future)
136 *
137 * 06 23 2015 wei-de.chen
138 * [MOLY00122918] [MT6755][BRINGUP_FIRSTCALL][SS]
139 * Add MT6755 & MT6797 definition on drv_comm.h
140 *
141 * 02 06 2015 wei-de.chen
142 * [MOLY00094939] MASE UMOLY check in
143 * Merge 3G MASE change to UMOLY trunk due to JL Hsiao's request
144 *
145 * 10 01 2014 wei-de.chen
146 * [MOLY00080141] Change macro of DRV_WriteReg32_NPW_RB of TK6291
147 * Change macro of DRV_WriteReg32_NPW_RB by TK6291 due to memory map of TK6291
148 * u1rwduu`whqnvpghlqg|r`l(a`+fm`k
149 *
150 * 12 11 2013 chin-chieh.hung
151 * [MOLY00045704] Init MT6595 common driver
152 * update NPW Driver API for MT6595
153 *
154 * 12 10 2012 po.hu
155 * [MOLY00007257] [Modis] Modis????JMinGW?@?compier?H??linux build
156 * .
157 *
158 * 11 30 2012 ansel.liao
159 * [MOLY00006575] Add UART/HDMA Driver
160 * add dbg_flush and corresponding drvtest
161 *
162 * 11 02 2012 chin-chieh.hung
163 * [MOLY00005322] TATAKA merge to MOLY
164 * Integration change(non-devdrv/non-sys_drv driver part-2)
165 *
166 * 06 11 2012 jy.lan
167 * removed!
168 * .
169 *
170 * 05 24 2012 wcpuser_integrator
171 * removed!
172 * Qinghua Yu check in global enum (MSG & SAP) at modem_dev.
173 *
174 * 05 24 2012 wcpuser_integrator
175 * removed!
176 * Qinghua Yu check in global enum (MSG & SAP) at modem_dev.
177 *
178 * 05 24 2012 wcpuser_integrator
179 * removed!
180 * Qinghua Yu check in global enum (MSG & SAP) at modem_dev.
181 *
182 * 03 15 2012 argus.lin
183 * removed!
184 * fix build error
185 *
186 * 03 15 2012 argus.lin
187 * removed!
188 * fix build error
189 *
190 * 11 11 2011 jy.lan
191 * removed!
192 * .
193 *
194 * 02 16 2011 guoxin.hong
195 * removed!
196 * .
197 *
198 * 12 23 2010 anderson.tsai
199 * removed!
200 * .
201 *
202 * 12 16 2010 simon.shih
203 * removed!
204 * .
205 *
206 * 11 25 2010 simon.shih
207 * removed!
208 * .
209 *
210 * 10 18 2010 simon.shih
211 * removed!
212 * .
213 *
214 * 09 24 2010 simon.shih
215 * removed!
216 * .
217 *
218 * removed!
219 * removed!
220 *
221 *
222 * removed!
223 * removed!
224 *
225 *
226 * removed!
227 * removed!
228 *
229 *
230 * removed!
231 * removed!
232 *
233 *
234 * removed!
235 * removed!
236 *
237 *
238 * removed!
239 * removed!
240 *
241 *
242 * removed!
243 * removed!
244 *
245 *
246 * removed!
247 * removed!
248 *
249 *
250 * removed!
251 * removed!
252 *
253 *
254 * removed!
255 * removed!
256 *
257 *
258 * removed!
259 * removed!
260 *
261 *
262 * removed!
263 * removed!
264 *
265 *
266 * removed!
267 * removed!
268 *
269 *
270 * removed!
271 * removed!
272 *
273 *
274 * removed!
275 * removed!
276 *
277 *
278 * removed!
279 * removed!
280 *
281 *
282 * removed!
283 * removed!
284 *
285 *
286 * removed!
287 * removed!
288 *
289 *
290 * removed!
291 * removed!
292 *
293 *
294 * removed!
295 * removed!
296 *
297 *
298 * removed!
299 * removed!
300 *
301 *
302 * removed!
303 * removed!
304 *
305 *
306 * removed!
307 * removed!
308 *
309 *
310 * removed!
311 * removed!
312 *
313 *
314 * removed!
315 * removed!
316 *
317 *
318 * removed!
319 * removed!
320 *
321 *
322 * removed!
323 * removed!
324 *
325 *
326 * removed!
327 * removed!
328 *
329 *
330 * removed!
331 * removed!
332 *
333 *
334 * removed!
335 * removed!
336 *
337 *
338 * removed!
339 * removed!
340 *
341 *
342 * removed!
343 * removed!
344 *
345 *
346 * removed!
347 * removed!
348 *
349 *
350 * removed!
351 * removed!
352 *
353 *
354 * removed!
355 * removed!
356 * add NFI bus mutex
357 *
358 * removed!
359 * removed!
360 *
361 *
362 * removed!
363 * removed!
364 *
365 *
366 * removed!
367 * removed!
368 *
369 *
370 * removed!
371 * removed!
372 *
373 *
374 * removed!
375 * removed!
376 *
377 *
378 * removed!
379 * removed!
380 *
381 *
382 * removed!
383 * removed!
384 *
385 *
386 * removed!
387 * removed!
388 *
389 *
390 * removed!
391 * removed!
392 *
393 *
394 * removed!
395 * removed!
396 *
397 *
398 * removed!
399 * removed!
400 *
401 *
402 * removed!
403 * removed!
404 *
405 *
406 * Rev 1.24 Jul 11 2005 17:41:48 mtk00288
407 * add DEVICE_ID
408 * Resolution for 11921: [LPWR][Add feature]Add LPWR module
409 *
410 * Rev 1.23 20 Jun 2005 20:00:32 mtk00502
411 * add MT6226/MT6227 compile option
412 * Resolution for 11617: [DRV][New Feature]Add MT6226/M6227 compile option
413 *
414 * Rev 1.22 May 17 2005 00:29:10 BM_Trunk
415 * Karlos:
416 * add copyright and disclaimer statement
417 *
418 * Rev 1.21 Mar 19 2005 14:49:34 mtk00502
419 * add 6228 compile option
420 * Resolution for 10304: [Drirver][New Fearture]Support MT6228
421 *
422 * Rev 1.20 Jan 18 2005 00:34:22 BM
423 * append new line in W05.04
424 *
425 * Rev 1.19 Dec 10 2004 12:12:18 mtk00479
426 * Add parentheses for the parameters of macro ()
427 * Resolution for 9089: [Drv][Optimization]Add parentheses for the parameters of macro
428 *
429 * Rev 1.18 Oct 12 2004 11:34:12 mtk00479
430 * Add compile option of MT6217
431 * Resolution for 8195: [Drv][NewFeature]Add compile option of MT6217
432 *
433 * Rev 1.17 May 13 2004 22:15:40 mtk00479
434 * Add for USB charging
435 * Resolution for 5419: [Drv][AddFeature]Add USB charging function
436 *
437 * Rev 1.16 Mar 25 2004 15:01:16 mtk00288
438 * Add driver timing debug functions.
439 * Resolution for 4496: [DRV][Add Feature]add driver timing debug functions
440 *
441 * Rev 1.15 Mar 12 2004 14:00:30 mtk00502
442 * define a macro to send msg
443 * Resolution for 4231: [BMT][New Feature]add a function to translate voltage to temperature
444 *
445 * Rev 1.14 Feb 27 2004 20:14:52 mtk00502
446 * add 6219 compilt option
447 * Resolution for 4005: [Driver][New Feature]add 6219 compile option
448 *
449 * Rev 1.13 Feb 19 2004 19:51:30 mtk00502
450 * to solve assert during RTC power on
451 * Resolution for 3956: [Driver][New feature]solve assert during RTC power on
452 *
453 * Rev 1.12 Feb 05 2004 18:57:28 mtk00288
454 * add DRV_COMM_REG2_USBMS_PWRON definition
455 * Resolution for 3839: [MMI USB DRV L4 UEM TST BMT] [New Feature] USB device integration
456 *
457 * Rev 1.11 Dec 25 2003 10:03:36 mtk00479
458 * Remove compile option of MT6205B for DRV_COMM_REG2_NORMAL_RESET and DRV_COMM_REG2_CHRPWRON.
459 * Resolution for 3588: [Drv][BugFix]Remove compile option of MT6205B for DRV_COMM_REG2_NORMAL_RESET and DRV_COMM_REG2_CHRPWRON.
460 *
461 * Rev 1.10 Oct 31 2003 15:27:24 mtk00502
462 * add 6218B compile option
463 * Resolution for 3233: [Driver][New Feature] Add 6218B compile option
464 *
465 * Rev 1.8 Oct 02 2003 21:01:26 mtk00288
466 * add the power on cause bit in DRV_COMM_REG2 register
467 * Resolution for 3045: [DRV][Bugfix]Adjust the priority of power on cause
468 *
469 * Rev 1.7 Jun 18 2003 22:37:28 mtk00288
470 * Driver customize
471 * Resolution for 2052: [DRV][Customize]Driver customize for different requirements
472 *
473 * Rev 1.6 Jun 12 2003 16:10:22 mtk00288
474 * add MT6218 definitions
475 * Resolution for 1952: [Drivers][add Feature]MT6218 Peripherals driver
476 *
477 * Rev 1.5 Apr 16 2003 21:43:24 mtk00288
478 * add "()" in DRV_Reg&DRV_WriteReg macro
479 * Resolution for 1547: [Drivers][Add Feature]Add MT6205B drivers
480 *
481 * Rev 1.4 Feb 27 2003 16:41:48 mtk00288
482 * add a macro(DRV_BuildPrimitive) to send primitive for driver.
483 * Resolution for 1098: Add Accessory(AUX) Task to MAUI project
484 *
485 * Rev 1.3 Feb 21 2003 15:40:02 mtk00288
486 * extern dbg_print function, when DRV_DEBUG define
487 * Resolution for 1011: Create ADC scheduler
488 *
489 * Rev 1.2 Jan 23 2003 22:03:40 mtk00288
490 * remove unnecessary comments.
491 * Resolution for 491: BMT task and PMIC driver
492 *
493 * Rev 1.1 Dec 16 2002 11:38:28 mtk00288
494 * add kal_uint16 into DRV_WriteReg macro
495 * Resolution for 9: Read/Write Register access
496 *
497 * Rev 1.0 Nov 30 2002 19:49:58 admin
498 * Initial revision.
499 *------------------------------------------------------------------------------
500 * Upper this line, this part is controlled by ClearCase. DO NOT MODIFY!!
501 *============================================================================
502 ****************************************************************************/
503
504
505
506#ifndef __DRV_COMM_H__
507#define __DRV_COMM_H__
508
509#ifndef __CATEGORY_MODEM__
510#include "drv_features.h"
511#endif
512#include "kal_general_types.h"
513#include "kal_public_defs.h"
514#include "md_drv_sap.h"
515#ifndef __CATEGORY_MODEM__
516#include "reg_base.h"
517#endif
518
519#include "kal_trace.h"
520#include "sync_data.h"
521
522#if defined(DRV_MISC_LOW_COST_PROJ)
523 #define __LOW_COST_PROJECT__
524#endif
525
526
527
528typedef enum {
529 io_low=0,
530 io_high
531} IO_level;
532
533
534
535typedef enum {
536 DEV_DMA=0,
537 DEV_USB,
538 DEV_GCU,
539 DEV_CHE,
540 DEV_PPP,
541 DEV_GPT,
542 DEV_KP,
543 DEV_GPIO,
544 DEV_UART1,
545 DEV_UART2,
546 DEV_UART3,
547 DEV_SIM,
548 DEV_PWM,
549 DEV_PWM2,
550 DEV_ALTER,
551 DEV_LCD,
552 DEV_MSDC,
553 DEV_TRC,
554 DEV_NFI,
555 DEV_B2SPI,
556 DEV_IRDA,
557 DEV_ADC,
558 DEV_RTC,
559 DEV_DIV,
560 DEV_FCS,
561 DEV_RZLB,
562 DEV_CRZ,
563 DEV_TV_OUT,
564 DEV_IPP,
565 DEV_PNG,
566 DEV_GIF,
567 DEV_GCMQ,
568 DEV_G2D,
569 DEV_MP4,
570 DEV_JPEG,
571 DEV_PRZ,
572 DEV_RESZ,
573 DEV_ISP,
574 DEV_DCT,
575 DEV_IMGDMA,
576 DEV_DRZ,
577 DEV_MSDC2,
578 DEV_SIM2,
579 DEV_ROTDMA,
580 DEV_CAM104M,
581 DEV_LCD104M,
582 DEV_MAX_ID,
583 DEV_NULL_ID = 0xfe
584} DEVICE_ID_ENUM;
585
586
587
588typedef void (* VOID_FUNC)(void);
589
590//#define __DRV_COMM_REG_DBG__
591#ifdef __DRV_COMM_REG_DBG__
592
593#define MAX_DRV_COMM_REG_DBG_INFO_SIZE 2048 /*must be 2^n*/
594
595typedef struct{
596 kal_uint8 write_flag;
597 kal_uint16 line_number;
598 kal_uint32 reg_addr;
599 kal_uint32 reg_value;
600 kal_uint32 time_log;
601}DRV_COMM_REG_DBG_DATA;
602
603typedef struct{
604 DRV_COMM_REG_DBG_DATA dbg_data[MAX_DRV_COMM_REG_DBG_INFO_SIZE];
605 kal_uint16 dbg_data_idx;
606}DRV_REG_DBG_STRUCT;
607
608#define DRV_DBG_WriteReg(addr,data) drv_reg_dbg_trace_write16(__LINE__, addr, data)
609
610#define DRV_DBG_Reg(addr) drv_reg_dbg_trace_read16(__LINE__, addr)
611
612#define DRV_DBG_WriteReg32(addr,data) drv_reg_dbg_trace_write32(__LINE__, addr, data)
613
614#define DRV_DBG_Reg32(addr) drv_reg_dbg_trace_read32(__LINE__, addr)
615
616#define DRV_DBG_WriteReg8(addr,data) drv_reg_dbg_trace_write8(__LINE__, addr, data)
617
618#define DRV_DBG_Reg8(addr) drv_reg_dbg_trace_read8(__LINE__, addr)
619
620#define DRV_DBG_ClearBits(addr,data) {\
621 kal_uint16 temp;\
622 temp = DRV_DBG_Reg(addr);\
623 temp &=~(data);\
624 DRV_DBG_WriteReg(addr,temp);\
625}
626
627#define DRV_DBG_SetBits(addr,data) {\
628 kal_uint16 temp;\
629 temp = DRV_DBG_Reg(addr);\
630 temp |= (data);\
631 DRV_DBG_WriteReg(addr,temp);\
632}
633
634#define DRV_DBG_SetData(addr, bitmask, value) {\
635 kal_uint16 temp;\
636 temp = (~(bitmask)) & DRV_DBG_Reg(addr);\
637 temp |= ((value) & (bitmask));\
638 DRV_DBG_WriteReg(addr,temp);\
639}
640
641#define DRV_DBG_ClearBits32(addr,data) {\
642 kal_uint32 temp;\
643 temp = DRV_DBG_Reg32(addr);\
644 temp &=~(data);\
645 DRV_DBG_WriteReg32(addr,temp);\
646}
647
648#define DRV_DBG_SetBits32(addr,data) {\
649 kal_uint32 temp;\
650 temp = DRV_DBG_Reg32(addr);\
651 temp |= (data);\
652 DRV_DBG_WriteReg32(addr,temp);\
653}
654
655#define DRV_DBG_SetData32(addr, bitmask, value) {\
656 kal_uint32 temp;\
657 temp = (~(bitmask)) & DRV_DBG_Reg32(addr);\
658 temp |= ((value) & (bitmask));\
659 DRV_DBG_WriteReg32(addr,temp);\
660}
661
662#define DRV_DBG_ClearBits8(addr,data) {\
663 kal_uint8 temp;\
664 temp = DRV_DBG_Reg8(addr);\
665 temp &=~(data);\
666 DRV_DBG_WriteReg8(addr,temp);\
667}
668
669#define DRV_DBG_SetBits8(addr,data) {\
670 kal_uint8 temp;\
671 temp = DRV_DBG_Reg8(addr);\
672 temp |= (data);\
673 DRV_DBG_WriteReg8(addr,temp);\
674}
675
676#define DRV_DBG_SetData8(addr, bitmask, value) {\
677 kal_uint8 temp;\
678 temp = (~(bitmask)) & DRV_DBG_Reg8(addr);\
679 temp |= ((value) & (bitmask));\
680 DRV_DBG_WriteReg8(addr,temp);\
681}
682
683extern void drv_reg_dbg_trace_write16(kal_uint16 line, kal_uint32 addr, kal_uint32 data);
684extern void drv_reg_dbg_trace_write32(kal_uint16 line, kal_uint32 addr, kal_uint32 data);
685extern void drv_reg_dbg_trace_write8(kal_uint16 line, kal_uint32 addr, kal_uint32 data);
686extern kal_uint16 drv_reg_dbg_trace_read16(kal_uint16 line, kal_uint32 addr);
687extern kal_uint32 drv_reg_dbg_trace_read32(kal_uint16 line, kal_uint32 addr);
688extern kal_uint32 drv_reg_dbg_trace_read8(kal_uint16 line, kal_uint32 addr);
689
690#endif //__DRV_COMM_REG_DBG__
691
692#if defined(__ESL_MASE_GEN97__) && !defined(__MTK_TARGET__)
693void write_register(unsigned regOfst, unsigned value);
694unsigned read_register (unsigned regOfst);
695#define DRV_WriteReg(addr,data) write_register(addr, data)
696#define DRV_WriteReg32(addr,data) write_register(addr, data)
697#define DRV_Reg32(addr) read_register(addr)
698#else /* __ESL_MASE_GEN97__ && !__MTK_TARGET__ */
699#define DRV_WriteReg(addr,data) ((*(volatile kal_uint16 *)(addr)) = (kal_uint16)(data))
700#define DRV_Reg(addr) (*(volatile kal_uint16 *)(addr))
701#define DRV_WriteReg32(addr,data) ((*(volatile kal_uint32 *)(addr)) = (kal_uint32)(data))
702#define DRV_Reg32(addr) (*(volatile kal_uint32 *)(addr))
703#define DRV_WriteReg8(addr,data) ((*(volatile kal_uint8 *)(addr)) = (kal_uint8)(data))
704#define DRV_Reg8(addr) (*(volatile kal_uint8 *)(addr))
705#endif /* else __ESL_MASE_GEN97__ && !__MTK_TARGET__ */
706
707#define DRV_SetReg8(addr, data) (DRV_WriteReg8(addr, DRV_Reg8(addr)|(data)))
708#define DRV_ClrReg8(addr, data) (DRV_WriteReg8(addr, DRV_Reg8(addr)&~(data)))
709#define DRV_SetReg(addr, data) (DRV_WriteReg(addr, DRV_Reg(addr)|(data)))
710#define DRV_ClrReg(addr, data) (DRV_WriteReg(addr, DRV_Reg(addr)&~(data)))
711#define DRV_SetReg32(addr, data) (DRV_WriteReg32(addr, DRV_Reg32(addr)|(data)))
712#define DRV_ClrReg32(addr, data) (DRV_WriteReg32(addr, DRV_Reg32(addr)&~(data)))
713
714
715
716/* DRV_WriteReg32_NPW, DRV_WriteReg32_NPW_RB provide non-post-write operation
717 Abbreviation:
718 NPW: Non Post Write
719 RB : Read Back
720 Description:
721 1. DRV_WriteReg32_NPW: In System with strongly order memory attribute
722 (write response from target hardware IP), we just write the data
723 into the strongly order region (write_addr | 0xF000_0000)
724 2. DRV_WriteReg32_NPW: In System without strongly order memory attribute,
725 we write the data into the write_addr and read the write_addr
726 back to avoid the write data is buffered in bus fabric
727 3. DRV_WriteReg32_NPW_RB: In some hardware IP design, reading the
728 write_addr has some side-effects, in order to avoid this situation,
729 DRV_WriteReg32_NPW_RB is provided and the read_addr of
730 DRV_WriteReg32_NPW_RB is assigned by the user.
731 User must confirm that all previous write operations are finished
732 before the data of read_addr ready.
733 For example, write_addr in IP-A, read_addr in IP-B can't make sure the
734 IP-A write operation is finished. write_addr/read_addr must be in the
735 same IP.
736 4. DRV_WriteReg32_NPW_RB: For system with strongly order memory
737 attribute, DRV_WriteReg32_NPW_RB does NOT read the read_addr
738 (the same behavior with DRV_WriteReg32_NPW).
739 5. Memory barrier operations (DMB/DSB in ARM Arch.) are not included in
740 DRV_WriteReg32_NPW_RB and DRV_WriteReg32_NPW.
741 6. (For 6292 MIPS CPU arch) Due to MIPS has no strongly order memory
742 attribute, we use non-bufferable bank write + MO_sync to reach
743 this feature.
744 -- MO_sync is a series of r/w access special address
745 through MO port. It has same effect as memory barrier of
746 other MO port access, but NO effect to other MM port access.
747 So strictly it is not conflict to description #5.
748 */
749
750#if defined(__ESL_COSIM_LTE__)
751 #define DRV_WriteReg32_NPW_RB(write_addr, data, read_addr) \
752 do { \
753 DRV_WriteReg32(write_addr, data); \
754 DRV_Reg32(read_addr); \
755 } while(0);
756
757 #define DRV_WriteReg32_NPW(write_addr, data) \
758 DRV_WriteReg32_NPW_RB(write_addr, data, write_addr)
759 #define DRV_SetReg32_NPW(write_addr, data) \
760 DRV_WriteReg32_NPW(((kal_uint32)(write_addr)), DRV_Reg32(write_addr) | (data))
761 #define DRV_ClrReg32_NPW(write_addr, data) \
762 DRV_WriteReg32_NPW(((kal_uint32)(write_addr)), DRV_Reg32(write_addr) & (~(data)))
763
764#elif defined(__MD93__) || defined(__MD95__) || defined(MT6297) || defined(__MD97__) || defined(__MD97P__)
765
766 #if defined(__ESL_ENABLE__)||defined(__ESL_MASE__)
767 #define ELBRUS_UKNOWN_BANK_ACCESS(write_addr, data) do { \
768 DRV_WriteReg32((write_addr), (data)); \
769 MO_Sync(); \
770 } while(0);
771 #else
772 #define ELBRUS_UKNOWN_BANK_ACCESS(write_addr, data) do { \
773 ASSERT(0); \
774 } while(0);
775 #endif
776
777#if defined(__ESL_MASE_GEN97__) && !defined(__MTK_TARGET__)
778 #define DRV_WriteReg32_NPW_RB(write_addr, data, read_addr) DRV_WriteReg32(write_addr, read_addr)
779#else /* __ESL_MASE_GEN97__ && !__MTK_TARGET__ */
780 #define DRV_WriteReg32_NPW_RB(write_addr, data, read_addr) \
781 do{ \
782 /* For non-bufferable HW BANK */ \
783 if( (((kal_uint32)write_addr)>>28)==0xA || (((kal_uint32)write_addr)>>28)==0xC || (((kal_uint32)write_addr)>>28)==0xE ) \
784 { \
785 DRV_WriteReg32((write_addr), (data)); \
786 MO_Sync(); \
787 } \
788 /* For MDHW bufferable access, change to MDHW non-bufferable BANK */ \
789 else if( (((kal_uint32)write_addr)>>28)==0xB ) \
790 { \
791 DRV_WriteReg32(((((kal_uint32)write_addr) << 4) >> 4)|0xA0000000, (data)); \
792 MO_Sync(); \
793 } \
794 /* For APHW bufferable access, change to APHW non-bufferable BANK */ \
795 else if( ((((kal_uint32)write_addr)>>28)==0xD) ) \
796 { \
797 DRV_WriteReg32(((((kal_uint32)write_addr) << 4) >> 4)|0xC0000000, (data)); \
798 MO_Sync(); \
799 } \
800 else \
801 { \
802 ELBRUS_UKNOWN_BANK_ACCESS(write_addr, data); \
803 } \
804 }while(0);
805#endif /* else __ESL_MASE_GEN97__ && !__MTK_TARGET__ */
806
807 #define DRV_WriteReg32_NPW(write_addr, data) \
808 DRV_WriteReg32_NPW_RB(write_addr, data, write_addr)
809 #define DRV_SetReg32_NPW(write_addr, data) \
810 DRV_WriteReg32_NPW(((kal_uint32)(write_addr)), DRV_Reg32(write_addr) | (data))
811 #define DRV_ClrReg32_NPW(write_addr, data) \
812 DRV_WriteReg32_NPW(((kal_uint32)(write_addr)), DRV_Reg32(write_addr) & (~(data)))
813
814
815#elif defined(COMMON_PLATFORM_MAP)
816 #define DRV_WriteReg32_NPW_RB(write_addr, data, read_addr) \
817 do{ \
818 if((write_addr)>=0x88000000U && (write_addr)<=0x8FFFFFFFU) \
819 { \
820 DRV_WriteReg32((write_addr)&(~(0x08000000)), (data)); \
821 } \
822 else if( ((write_addr)>>28)==0xB ) \
823 { \
824 DRV_WriteReg32((write_addr)&(~(0x10000000)), (data)); \
825 } \
826 /* Strongly Order: 0x80000000~0x87FFFFFF/0xA0000000 */ \
827 else if( (((write_addr)>>28)==8) || (((write_addr)>>28)==0xA) ) \
828 { \
829 DRV_WriteReg32((write_addr), (data)); \
830 } \
831 else \
832 { \
833 ASSERT(0); \
834 } \
835 }while(0);
836
837 #define DRV_WriteReg32_NPW(write_addr, data) \
838 DRV_WriteReg32_NPW_RB(write_addr, data, write_addr)
839 #define DRV_SetReg32_NPW(write_addr, data) \
840 DRV_WriteReg32_NPW(((kal_uint32)(write_addr)), DRV_Reg32(write_addr) | (data))
841 #define DRV_ClrReg32_NPW(write_addr, data) \
842 DRV_WriteReg32_NPW(((kal_uint32)(write_addr)), DRV_Reg32(write_addr) & (~(data)))
843#else
844 /* TBC */
845 #error "NPW API: unsupported CHIP"
846#endif /* end of TK6280/MT6290/others */
847
848#define DRV_ClearBits(addr,data) {\
849 kal_uint16 temp;\
850 temp = DRV_Reg(addr);\
851 temp &=~(data);\
852 DRV_WriteReg(addr,temp);\
853}
854
855#define DRV_SetBits(addr,data) {\
856 kal_uint16 temp;\
857 temp = DRV_Reg(addr);\
858 temp |= (data);\
859 DRV_WriteReg(addr,temp);\
860}
861
862#define DRV_SetData(addr, bitmask, value) {\
863 kal_uint16 temp;\
864 temp = (~(bitmask)) & DRV_Reg(addr);\
865 temp |= ((value) & (bitmask));\
866 DRV_WriteReg(addr,temp);\
867}
868
869#define DRV_ClearBits32(addr,data) {\
870 kal_uint32 temp;\
871 temp = DRV_Reg32(addr);\
872 temp &=~(data);\
873 DRV_WriteReg32(addr,temp);\
874}
875
876#define DRV_SetBits32(addr,data) {\
877 kal_uint32 temp;\
878 temp = DRV_Reg32(addr);\
879 temp |= (data);\
880 DRV_WriteReg32(addr,temp);\
881}
882
883#define DRV_SetData32(addr, bitmask, value) {\
884 kal_uint32 temp;\
885 temp = (~(bitmask)) & DRV_Reg32(addr);\
886 temp |= ((value) & (bitmask));\
887 DRV_WriteReg32(addr,temp);\
888}
889
890#define DRV_ClearBits8(addr,data) {\
891 kal_uint8 temp;\
892 temp = DRV_Reg8(addr);\
893 temp &=~(data);\
894 DRV_WriteReg8(addr,temp);\
895}
896
897#define DRV_SetBits8(addr,data) {\
898 kal_uint8 temp;\
899 temp = DRV_Reg8(addr);\
900 temp |= (data);\
901 DRV_WriteReg8(addr,temp);\
902}
903
904#define DRV_SetData8(addr, bitmask, value) {\
905 kal_uint8 temp;\
906 temp = (~(bitmask)) & DRV_Reg8(addr);\
907 temp |= ((value) & (bitmask));\
908 DRV_WriteReg8(addr,temp);\
909}
910
911#define DRV_BuildPrimitive(_ilm,_srcid,_dstid,_msgid,_data) \
912{\
913 _ilm->src_mod_id = _srcid;\
914 _ilm->sap_id = DRIVER_PS_SAP;\
915 _ilm->dest_mod_id = _dstid;\
916 _ilm->msg_id = _msgid;\
917 _ilm->local_para_ptr = (local_para_struct *)_data;\
918 _ilm->peer_buff_ptr = NULL;\
919}
920
921#define DRV_SendPrimitive(_ilm,_srcid,_dstid,_msgid,_data, _sap_id) \
922{\
923 _ilm->src_mod_id = _srcid;\
924 _ilm->sap_id = _sap_id;\
925 _ilm->dest_mod_id = _dstid;\
926 _ilm->msg_id = _msgid;\
927 _ilm->local_para_ptr = (local_para_struct *)_data;\
928 _ilm->peer_buff_ptr = NULL;\
929}
930
931extern void Fast_Memcpy(void *srcaddr, void *dstaddr, kal_uint32 leng);
932extern void Fast_SherifWrite(void *srcaddr,void *dstaddr,kal_uint32 len);
933extern void Fast_SherifRead(void *srcaddr,void *dstaddr,kal_uint32 len);
934// MoDIS parser skip start
935extern kal_uint32 SaveAndSetIRQMask(void);
936extern void RestoreIRQMask(kal_uint32);
937extern boot_mode_type Drv_query_boot_mode(void);
938// MoDIS parser skip end
939extern kal_uint32 drv_get_current_time(void);
940extern kal_uint32 drv_get_duration_tick(kal_uint32 previous_time, kal_uint32 current_time);
941extern kal_uint32 drv_get_duration_ms(kal_uint32 previous_time);
942
943// MoDIS parser skip start
944/// NFI bus mutex
945void get_NFI_bus(void);
946void free_NFI_bus(void);
947
948#if defined(DRV_DEBUG) || defined(ATEST_DRV_ENABLE)
949extern void dbg_print(char *fmt,...);
950extern void dbg_printWithTime(char *fmt,...);
951extern void dbg_flush(void);
952#endif /*DRV_DEBUG*/
953// MoDIS parser skip end
954
955#ifdef DRV_MEMORY_TRACE_DEBUG
956
957 #define MAX_DRV_DBG_INFO_SIZE 2048
958 typedef enum {
959 NAND_READ_START,
960 NAND_READ_STOP,
961 DRV_DBG_MAX_ID
962 } DRV_DBG_ID;
963
964 typedef struct{
965 kal_uint16 tag;
966 kal_uint32 time;
967 kal_uint32 data1;
968 kal_uint32 data2;
969 }DRV_DBG_DATA;
970
971 typedef struct{
972 DRV_DBG_DATA dbg_data[MAX_DRV_DBG_INFO_SIZE];
973 kal_uint16 dbg_data_idx;
974 }DRV_DBG_STRUCT;
975
976extern void drv_dbg_trace(kal_uint16 index, kal_uint32 time, kal_uint32 data1, kal_uint32 data2);
977#endif /*DRV_MEMORY_TRACE_DEBUG*/
978
979#if defined(__MTK_TARGET__)
980#if defined(__RVCT__)
981/* This marco is to get the reture address of the caller function. */
982#define DRV_GET_RET_ADDR(retAddr) {\
983 retAddr = __return_address();\
984}
985
986/* This marco is to provide a for loop delay with the count as the parameter.
987 To add NOP is to prevent it from being optimized. */
988#define DRV_FOR_LOOP(_count) \
989{\
990 kal_uint32 loop;\
991 for (loop=0;loop<_count;loop++)\
992 {\
993 __nop();\
994 }\
995 }\
996}\
997
998#elif defined(__GNUC__)
999
1000/* This marco is to get the reture address of the caller function. */
1001/* GCC has function to support this */
1002#define DRV_GET_RET_ADDR(retAddr) {\
1003 retAddr = __builtin_return_address (0);\
1004}
1005
1006/* This marco is to provide a for loop delay with the count as the parameter.
1007 To add NOP is to prevent it from being optimized. */
1008#define DRV_FOR_LOOP(_count) \
1009{\
1010 kal_uint32 loop;\
1011 for (loop=0;loop<_count;loop++)\
1012 {\
1013 __nop();\
1014 }\
1015 }\
1016}\
1017
1018#else /* __RVCT__ */
1019
1020/* This marco is to get the reture address of the caller function. */
1021#define DRV_GET_RET_ADDR(retAddr) {\
1022 __asm {\
1023 MOV retAddr,lr\
1024 }\
1025}
1026
1027/* This marco is to provide a for loop delay with the count as the parameter.
1028 To add NOP is to prevent it from being optimized. */
1029#define DRV_FOR_LOOP(_count) \
1030{\
1031 kal_uint32 loop;\
1032 for (loop=0;loop<_count;loop++)\
1033 {\
1034 __asm {\
1035 NOP\
1036 }\
1037 }\
1038}\
1039
1040#endif /* __RVCT__ */
1041
1042#else //#if defined(__MTK_TARGET__)
1043
1044#define DRV_GET_RET_ADDR(retAddr)
1045
1046#define DRV_FOR_LOOP(_count)
1047
1048#endif //#if defined(__MTK_TARGET__)
1049/*************************************************************************
1050 APIs for driver debugging
1051*************************************************************************/
1052// MoDIS parser skip start
1053#if defined(__TST_MODULE__)|| defined(L1_SIM)
1054#if defined(MTK_KAL_MNT) || defined(KAL_ON_OSCAR) || defined(MCD_DLL_EXPORT) || defined(L1_SIM)
1055INLINE_MODIFIER INLINE void drv_trace0(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type)
1056{
1057 (void)trc_class;
1058 (void)msg_index;
1059 (void)arg_type;
1060 return;
1061}
1062INLINE_MODIFIER INLINE void drv_trace1(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type, kal_uint32 data1)
1063{
1064 (void)trc_class;
1065 (void)msg_index;
1066 (void)arg_type;
1067 (void)data1;
1068 return;
1069}
1070INLINE_MODIFIER INLINE void drv_trace2(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type, kal_uint32 data1, kal_uint32 data2)
1071{
1072 (void)trc_class;
1073 (void)msg_index;
1074 (void)arg_type;
1075 (void)data1;
1076 (void)data2;
1077 return;
1078}
1079INLINE_MODIFIER INLINE void drv_trace4(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type, kal_uint32 data1, kal_uint32 data2, kal_uint32 data3, kal_uint32 data4)
1080{
1081 (void)trc_class;
1082 (void)msg_index;
1083 (void)arg_type;
1084 (void)data1;
1085 (void)data2;
1086 (void)data3;
1087 (void)data4;
1088 return;
1089}
1090INLINE_MODIFIER INLINE void drv_trace8(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type, kal_uint32 data1, kal_uint32 data2, kal_uint32 data3, kal_uint32 data4,
1091 kal_uint32 data5, kal_uint32 data6, kal_uint32 data7, kal_uint32 data8)
1092{
1093 (void)trc_class;
1094 (void)msg_index;
1095 (void)arg_type;
1096 (void)data1;
1097 (void)data2;
1098 (void)data3;
1099 (void)data4;
1100 (void)data5;
1101 (void)data6;
1102 (void)data7;
1103 (void)data8;
1104 return;
1105}
1106#else /*#if defined(MTK_KAL_MNT) || defined(KAL_ON_OSCAR) || defined(MCD_DLL_EXPORT) || defined(L1_SIM)*/
1107extern void drv_trace0(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type);
1108extern void drv_trace1(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type, kal_uint32 data1);
1109extern void drv_trace2(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type, kal_uint32 data1, kal_uint32 data2);
1110extern void drv_trace4(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type, kal_uint32 data1, kal_uint32 data2, kal_uint32 data3, kal_uint32 data4);
1111extern void drv_trace8(trace_class_enum trc_class, kal_uint32 msg_index, const char *arg_type, kal_uint32 data1, kal_uint32 data2, kal_uint32 data3, kal_uint32 data4,
1112 kal_uint32 data5, kal_uint32 data6, kal_uint32 data7, kal_uint32 data8);
1113#endif /*#if defined(MTK_KAL_MNT) || defined(KAL_ON_OSCAR) || defined(MCD_DLL_EXPORT) || defined(L1_SIM)*/
1114#else // #if defined(__TST_MODULE__)|| defined(L1_SIM)
1115/*#define drv_trace0(...)*/
1116/*#define drv_trace1(...)*/
1117/*#define drv_trace2(...)*/
1118/*#define drv_trace4(...)*/
1119/*#define drv_trace8(...)*/
1120#endif // #if defined(__TST_MODULE__)|| defined(L1_SIM)
1121
1122extern kal_uint8 drv_dummy_return(void);
1123// MoDIS parser skip end
1124#endif /*__DRV_COMM_H__*/